Android 调试小技巧
- 2020 年 4 月 2 日
- 筆記

最近在调试公司中的Android项目时,遇到的一些问题,及时做个总结,以免后面再遇到这类问题时再浪费时间。
高低版本 API 兼容
- 在高版本 API 方法前加 @TargetApi(API号)。
- 在代码上对用版本判断。 if(Build.VERSION.SDK_INT >= SDK版本号){ … }else{ … }
在 native lib 中如何单步追踪代码
- 在 app/build.gradle 中的 dependency 模块中增加下面的编译依赖。 不过现在好像不是必须的了。 … debugCompile project(path: ':your-lib', configuration: 'debug') releaseCompile project(path: ':your-lib', configuration: 'release') …
- 在lib(s)/build.gradle 中打开 publishNonDefault。 android { publishNonDefault true }
在工程中引入Module(其它工程)
- 先将引用的Module(工程)的 lib(s)/build.gradl 中的第一句修改为: apply plugin 'com.android.library'
- 删除 lib(s)/build.gradl 中 android/defaultConfig/applicationId 这项配置。
- 在 settings.gradle 中增加 incldue 指令。 include ':ModuleName'
- 如果该 Module 没在你的项目的目录下(也就是与App同一级目录),那么需要指定该Module的地址。 project(':ModuleName').projectDir = new File(settingsDir, 'path/ModuleName') 当然,你也可以直接将该项目手工拷贝到你项目的目录下,让它与 App 在同一级。
- 在 app/build.gradle中的 dependencies 里增加编译Module的指令。 compile project(':ModuleName')
在工程中引用jar包
- 将所有需要引用的 jar 包存放到一个位置。
- 在 App/build.gradle 文件中的 dependencies 里增加下面的指令。 comple fileTree(dir:'path/jarDir', include:['*.jar'])
在工程中引用 so 库
- 将所有需要引用的 so 文件存放到一个位置。
- 在 App/build.gradle 文件中的 android 里增加下面的指令。 sourceSets { main { jniLibs.srcDirs = ['../../../libs/cloudrtc'] } }
反编译 jar
- 从 Class File Reader下载 jar包。
- 执行下面的语句就可以将反编译的代码输出到 java 目录下了。 java -jar ../../cfr_0_123.jar sdk.jar –outputdir ./java –caseinsensitivefs true
在Android 中查找日志
- 将手机通过 USB 与电脑连接。
- 执行下面命令,登陆到Android 手机上。 adb shell
- 使用 busybox 工具 busybox tail -f xxx.log
在Android7.0之后,使用第三方 NDK受到限制
- 临时解决办法是,仍然使用老版本的 sdk。也就是将app目录下的 build.gradle文件中的 targetSdkVersion和compileSdkVersion都设置为 23。如下所示: compileSdkVersion 23 buildToolsVersion '26.0.0' defaultConfig { applicationId "io.agora.openlive" minSdkVersion 16 // JELLY_BEAN targetSdkVersion 23 … }
- 通过个面的修改有可能报错,如果是 aapt2的错误,可以修改gradle.properties,在该文件中添加下在的配置即可解决aapt2问题。 android.enableAapt2=false
- 还可能出现配置冲突。如 app 目录中 build.gradle文件中的 dependencies里的配置项有可能有冲突。可以按照 Android stuido里的提示信息进行修改即可。
OPPO手机无法通过 AS 安装包问题
现象是报 [INSTALL_FAILED_TEST_ONLY ]
错误。解决办法是在 gradle.properties 文件中添加 android.injected.testOnly=false
配置。
APK Crash后,默认被重新拉起,日志被冲没
解决办法是每次启动时,都生成一个新的日志。即生成日志的名子通过随机数生成。
安装的包内容是老的
CMake编译时内部会使用缓存,所以很容易出现这种情况。可以通过删除Native项目中的 build目录,主动让 CMake重新编译。
有些 Android机没有 vi怎么办
可以写一个脚本,通过 adb shell pull
命令将日志文件拉到本地分析问题。
结束语
不断更新中 …