如何使用Android Studio微信开发本地调试工具/调试Android自带系统应用

& Android Studio(二十一):调试你的应用
Android Studio(二十一):调试你的应用
  包含了一个调试器,允许你调试运行在Android虚拟机或连接的Android设备的应用。通过Android Studio的调试器,你可以:  1、 选择你调试设备的app  2、 为你的代码设置断点  3、 在运行时检测变量和表达式  4、 截图和录像  通过点击工具栏中的Debug按钮来开始调试,Android Studio生成一个APK,并且使用调试key进行签名,安装到选定的设备中运行并打开调试Debug窗口。  如果点击Debug后,在Select Deployment Target窗口没有出现任何设备,你需要连接一台设备或者创建一个虚拟机。  如果你的app已经运行在一个连接的设备或虚拟机中,你可以通过如下方式开始运行:  1、 点击Attach debugger to Android process  2、 在Choose Process 对话框,选择进程。  3、 点击OK  Debug窗口出现。  4、 点击Terminate结束调试。  使用系统日志  系统日志显示了你调试app时的系统信息。这些消息包含你app运行在设备中的信息。如果你想用系统日志来调试你的app,确保你写了打印日志的相关代码。  在你的代码中打印日志消息  在你的代码中打印日志消息,使用Log类。如下:
import&android.util.L&&
public&class&MyActivity&extends&Activity&{&&
&&&&private&static&final&String&TAG&=&MyActivity.class.getSimpleName();&&
&&&&@Override&&
&&&&public&void&onCreate(Bundle&savedInstanceState)&{&&
&&&&&&&&if&(savedInstanceState&!=&null)&{&&
&&&&&&&&&&&&Log.d(TAG,&&onCreate()&Restoring&previous&state&);&&
&&&&&&&&&&&&&&
&&&&&&&&}&else&{&&
&&&&&&&&&&&&Log.d(TAG,&&onCreate()&No&saved&state&available&);&&
&&&&&&&&&&&&&&
&&&&&&&&}&&
}&&  在开发过程中,你可以捕获异常并打印stack trace到系统日志:
void&someOtherMethod()&{&&
&&&&try&{&&
&&&&&&&&...&&
&&&&}&catch&(SomeException&e)&{&&
&&&&&&&&Log.d(TAG,&&someOtherMethod()&,&e);&&
}&&  查看系统日志  在Android DDMS工具窗口中查看系统日志:  1、 在调试模式启动你的APP  2、 点击Android Monitor  3、 如果在Logcat视图中系统日志是空的,点击Restart。  Android DDMS工具窗口给你从Android Studio中访问DDMS某些特性的权限。  系统日志显示来自Android服务和其他Android应用的消息。通过以下方式进行过滤:  1、 显示特定进程的日志消息,在Devices视图中选择相应进程,然后点击Click Show Logcat from Selected Process。如果你的Devices视图没出点,点击Android DDMS工具窗口右边的Restore Devices View,这个按钮仅仅在你隐藏了Devices窗口时才可用。  2、 也可以根据log level来过滤  3、 也可以在输入框中输入特定的字符串,点击回车。  断点  Android Studio支持多种不同的断点来触发不同的调试动作。最常用的是行断点,应用在特定的行停止。暂停时,你可以检查变量,表达式,也可以单步执行来确定运行错误的原因。  添加一个行断点,可以按照以下方式:  1、 找到你需要执行到暂停的行,点击代码编辑器的左边,或者将光标移动到指定的行,店家Ctrl+F8。  2、 如果你的应用已经运行,直接单击Attach debugger to Android process。  当你的代码执行到断点的位置,Android Studio暂停了你的应用的执行。你可以使用调试器中的工具来查找错误的原因。  查看和配置断点  查看所有的断点和配置断点设置,点击Debug窗口左边的View Breakpoints,如图:  Breakpoints窗口允许你开启和禁用左边列表的每个断点。如果断点被禁用,Android Studio在到达这个断点时不会停止。&
本文发布:
本文地址:
发布:鸡啄米
&&( 9:40:55)&&( 9:19:13)&&( 9:49:31)&&( 10:43:50)&&( 10:52:6)&&( 9:28:8)&&( 9:22:0)&&( 10:34:29)&&( 11:1:21)&&( 10:8:46)
完全随机文章使用Android Studio 进行NDK开发和调试 - 简书
使用Android Studio 进行NDK开发和调试
尽管Android Studio已经越来越流行了,但很多人还是习惯于Eclipse或源码环境下开发JNI应用。个人认为使用Android Studio作NDK开发是必然趋势,所以本文将简单介绍如何在Android Studio上实现NDK开发。
JNI 是Java Native Inteface的缩写,是Java中定义的一种用于连接Java和C/C++接口的一种实现方式。
NDK 是 Native Developmentit的缩写,是Google在Android开发中提供的一套用于快速创建native工程的一个工具。使用这个工具可以很方便的编写和调试JNI的代码。
NDK可从或(个人网站)下载。
Gradle 是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置。
以往Android NDK开发需要在Eclipse或源码环境下,建立并配置Android.mk和Application.mk,且还要通过java命令生成.h头文件,才能编译生成so库。但在Android Studio中这些步骤都不需要,因为Gradle足够强大,只需配置Gradle即可编译生成so库。
gradle-experimental插件
在2015年5月的Google I/O大会上, Google宣布Android Studio开始支持NDK开发,通过和JetBrains的合作,将Clion整合进了Android Studio 1.3,并免费支持NDK C++开发。
同年7月,在Android Studio 1.3版本上添加了gradle-experimental插件,该插件支持NDK开发和调试,且带有代码不全和重构等高级功能。
CAVEAT: Note that this plugin is a preview of the plugin for feedback on performance and NDK integration.
The Gradle API for the new component model is not final, which means each plugin will only work with a specific version of Gradle.Additionally, the DSL may also change.
目前这个插件是预览插件,并不是正式的。意味着插件只能运行在特定的Gradle版本上。并且DSL(领域特定语言)也要改变。
使用Experimental插件进行NDK开发
使用Experimental插件的必要条件
1、Gradle-2.5或更高版本2、Android Studio 1.3 RC1或更高版本3、Android NDK r10e 或更高版本4、Build Tools 19.0.0 或更高版本
每个版本的experimental插件需要特定的Gradle版本
Plugin Version
Gradle Version
0.3.0-alpha3
0.6.0-alpha1
0.6.0-alpha5
0.7.0-alpha1
NDK开发步骤
1、新建一个Android标准工程
2、按F4打开工程配置
3、使用experimental插件需要对以下三个文件做修改:
./build.gradle
./app/build.gradle
./gradle/wrapper/gradle-wrapper.properties
./gradle/wrapper/gradle-wrapper.properties
将distributionUrl改用gradle-2.10版本
distributionUrl=https\\://services.gradle.org/distributions/gradle-2.10-all.zip
./build.gradle
使用com.android.tools.build:gradle-experimental代替 com.android.tools.build:gradle
buildscript {
repositories {
dependencies {
//classpath 'com.android.tools.build:gradle:2.0.0'
classpath "com.android.tools.build:gradle-experimental:0.7.0-alpha4"
// NOTE: Do not place your applicati they belong
// in the individual module build.gradle files
./app/build.gradle
这部分改动比较大,修改及注释如下:
// 用com.android.model.application 代替 com.android.application
apply plugin: 'com.android.model.application'
// 将原来的配置用 model{}包起来
// 取值必须使用 “=” 形式
// 否则会报 “Error:Cause: org.gradle.api.internal.ExtensibleDynamicObject” 错误
compileSdkVersion = 23
buildToolsVersion = '23.0.2'
defaultConfig {
// 取值必须使用 “=” 形式
applicationId = "com.connorlin.jnitest"
//这里要注意是 xxSdkVersion.apiLevel
// 否则会报 “Unable to load class com.android.build.gradle.managed.ProductFlavor_Impl”错误
minSdkVersion.apiLevel = 15
targetSdkVersion.apiLevel = 23
versionCode =
versionName = "1.0"
// 配置NDK
// 生成so的名字,是必须的
moduleName ="JNITest"
toolchain = 'clang'
CFlags.add('-std=c99')
// 添加依赖库
ldLibs.addAll(['android','OpenSLES', 'log'])
// 生成不同abi体系的so库
abiFilters.addAll(['armeabi', 'armeabi-v7a', 'arm64-v8a',
'x86', 'x86_64',
'mips', 'mips64'])
buildTypes {
minifyEnabled = false
// 这里注意:使用proguardFiles.add()方法
proguardFiles.add(file('proguard-rules.txt'))
4、在Java文件(这里以JNIActivity为例)中添加代码
System.loadLibrary("JNITest");
public native String testJni();
此时,native方法标红,提示如下:
在testJni()方法上按快捷键Alt + Enter,出现如下提示
按回车,会自动在main目录下生成jni文件夹,内含JniDemo.c:
#include &jni.h&
JNIEXPORT jstring JNICALL
Java_com_connorlin_jnitest_MainActivity_testJni(JNIEnv *env, jobject instance) {
return (*env)-&NewStringUTF(env, "returnValue");
你会发现,Android Studio已经为我们自动生成JNI方法了,你只需要再写实现就可以了。
至此,最简单的NDK开发配置完毕。
其他配置,请参考,Demo可以参考
换种方式进行NDK开发
既然预览版com.android.tools.build:gradle-experimental支持NDK,那么正式版com.android.tools.build:gradle 是否也可以实现NDK开发呢?
经过实验,答案是可以的!
1、新建一个Android标准工程,并在工程设置中配置NDK路径。
2、打开 app level 的 build.gradle, 配置NDK
moduleName "NdkJniDemo"
//生成的so名字
abiFilters "armeabi", "armeabi-v7a", "x86" //输出指定三种abi体系结构下的so库,可忽略
然后点击右上角Sync Now, 会有如下错误提示:
按提示,在 gradl.properties 文件里加上android.useDeprecatedNdk=true即可。
3、在Java文件(这里以JNIActivity为例)中添加代码
System.loadLibrary("JNITest");
public native String testJni();
接着在testJni()方法上按快捷键Alt + Enter并回车,
同样,会自动在main目录下生成jni文件夹,内含JniDemo.c:
#include &jni.h&
但是,你会发现并不会自动生成JNI方法,这是因为使用experimental插件才会自动生成代码。
那自动生成代码该如何实现呢?
方法依然是使用gradle-experimental插件,但是不同的是,在app level的build.gradle中添加com.android.tools.build:gradle-experimental依赖。
4、在./app/build.gradle中添加gradle-experimental依赖
dependencies {
compile 'com.android.tools.build:gradle-experimental:0.7.0'
再次在testJni()方法上按快捷键Alt + Enter并回车
#include &jni.h&
JNIEXPORT jstring JNICALL
Java_com_connorlin_jnitest_MainActivity_testJni(JNIEnv *env, jobject instance) {
return (*env)-&NewStringUTF(env, "returnValue");
你会发现成功自动生成JNI方法了。
这种方式有个副作用是 Run app 时可能会报错:
此时,只要将gradle-experimental依赖注释掉即可正常运行,同时会保持自动生成代码的功能,直到关闭工程。这样我们在需要自动生成代码的时候,将gradle-experimental依赖再次打开即可。
默认情况下是不支持NDK调试的,但要支持NDK调试也很简单,只要做些简单配置即可。
1、打开JNI调试
2、配置Android Native - Debugger
3、下载LLDB 2.0
首次底部会报错
点击 Fix,提示下载LLDB 2.0,照做,下载安装即可。
4、完成NDK调试配置,可以正常调试了。
That's all!本文是以源码中development/tools/idegen/README作为指导文档.
环境: Ubuntu 14.10,openJdk 1.7,Android Studio 1.0.2,android-5.0.1_r1源码
由于AS是基于IntelliJ IDEA开发的,所以本文也适用于IntelliJ IDEA
一、修改Android Studio(以下简称AS)的内存配置
因为在导入源码时需要消耗大量内存,所以先修改IDEA_HOME/bin/studio64.vmoptions(x86的机器修改studio.vmoptions)中-Xms和-Xmx的值。文档中使用的是748m,&可自行修改。
&二、配置AS的JDK、SDK
在IDE中添加一个没有classpath的JDK,&这样可以确保使用源码里的库文件
并将其作为要使用的SDK的Java SDK。如下图
三、生成导入AS所需配置文件(*.ipr)
①编译源码(为了确保生成了.java文件,如R.java;如果编译过,则无需再次编译)
②检查out/host/linux-x86/framework/目录下是否有idegen.jar
如果idegen.jar不存在,执行:
mmm development/tools/idegen/
在5.0.1的源码中会生成res.java的文件夹,导致idegen.jar运行时抛FileNotFoundException,这是idegen的代码不够严谨造成的。
我的分享里有修改这个bug的patch,或者直接使用我分享的idegen.jar。
development/tools/idegen/idegen.sh
等待出现类似下面的结果:
Read excludes: 5ms
Traversed tree: 44078ms
这时会在源码的根目录下生成android.ipr和android.iml两个IntelliJ IDEA(AS是基于IntelliJ IDEA社区版开发的)的配置文件
AS在导入代码时比较慢,建议先修改android.iml,将自己用不到的代码exclude出去.可以仿照过滤.repo文件夹的语法,如:
&excludeFolder url="file://$MODULE_DIR$/.repo" /&
&excludeFolder url="file://$MODULE_DIR$/abi" /&
&excludeFolder url="file://$MODULE_DIR$/art" /&
删除掉所有不需要的module-library项 PS:感谢
这样在导入时就会跳过abi和art文件夹.过滤的越多,AS的处理速度就会越快.
④在AS中打开源码根目录下新生成的android.ipr
如果在导入时AS出现
&则建议按照其给定的解决方法来解决(网址:/display/IDEADEV/Inotify+Watches+Limit),具体内容如下图:
四、解决源码中跳转错误问题
①为当前工程设置正确的SDK和JDK
②设置'Modules'的依赖
先将所有依赖删掉,只留下上图'1'所指向的两个(注意:这里删除全部只是为了方便。如果确实用到了.jar,在将它们的路径添加进来就可以了.
如:5.0.1的ContactsCommon用到了geocoder-2.9.jar和libphonenumber-6.2.jar)
点击上图中'2'指向的'+'并选择上图'3'指向的'Jars or directories'选项,依次将frameworks和external文件夹添加进来.如:
注:推荐把frameworks和external这两个移到最上面,这样在代码跳转时会优先从这两个文件夹下查找,而不是在Android.jar中查找。
其它版本的代码在添加frameworks时可能会显示成:
没有关系,只是显示问题,点击OK还是会把frameworks路径添加进去的.
如果还有代码跳转错误,请仿照上面的步骤将相应代码的路径或jar文件添加到其Dependencies标签页中即可.
五、DEBUG源码
我们可以通过给刚导入的工程在'Modules'中添加'Android Framework'来让AS将它作为一个Android工程,从而方便我们调试代码.
可以按照上图中'1'和'2'来添加Android Framework支持.
在代码中加断点,然后选择'Run'-&'Attach&debugger&to&Android&process'或者直接点击下图所示的图标
在弹出的选择进程(Choose Process)对话框中,勾选显示所有进程,选择要DEBUG的代码所在的进程,点击OK即可.
代码中很多地方提示Call&requires&API&Level&x.... 出现这个问题是因为AS将我们的工程当做安卓应用程序工程了,且源码中没有指定minSdkVersion.
我们只需在源码根目录加一个声明minSdkVersion的AndroidManifest.xml文件即可(分享了一个AndroidManifest.xml)。
也可以考虑使用build.gradle来解决该问题。
文中所使用的文件地址:/cf3MBa2688eBw (提取码: 64e5)
阅读(...) 评论()}

我要回帖

更多关于 内网开发app如何调试 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信