关于处理客户反馈的问题的步骤
注意:要与客户的场景一致(正式线or测试线、账号密码、门店、操作步骤)
- 与IOS比对 1.1 IOS有一样的问题,初步判定是接口问题,抓接口反馈给后台 1.2 IOS正常,安卓重现客户场景 1.2.1 安卓正常:初步判定是版本不同的问题,找旧包抓接口 1.2.2 异常复现:如果有错误日志则通过日志定位问题;如果没有错误日志抓接口给后台
关于gradle相关的问题
Could not find com.android.tools.lint:lint-gradle:26.1.1问题的解决: google() jcenter() 这个google()放在前面就可以解决问题了
关于so库无法加载的问题
1、关于so库无法加载的问题,出现这样的报错:
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[...
需要在module中的build.gradle 中的 android{}标签内填这些
ndk {
abiFilters "armeabi", "armeabi-v7a", "x86", "mips"
}
sourceSets.main {
jniLibs.srcDir 'libs'
}
repositories {
flatDir {
dirs 'libs'
}
}
关于The APK file xxx.apk does not exist on disk. Error while Installing APK
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
// apk_渠道名-版本号-版本名称-编译时间.apk
def fileName = "xxx.apk"
tput.outputFile = new File(outputFile.parent, fileName)
}
}
给apk文件重命名时发生了问题, 如果除.apk之外的文件名中还包含. 的话, 可能会出现这个问题, 好吧 将重命名格式改的简单点, 问题就解决了
关于编译无法成功的问题
- 这个很诡异的错误,90%都是由于自定义控件在xml的路径写错了引起的
关于EXTERNAL_LIBRARIES SUB_PROJECTS问题
Error:Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'. >
Unexpected scopes found in folder 'D:\twoMoveMent\app\build\intermediates\transforms\mergeJavaRes\debug'.
Required: PROJECT. Found: EXTERNAL_LIBRARIES, PROJECT, SUB_PROJECTS
解决方案:将bulid目录删掉 重新编译即可!!!!!少走弯路
关于lib库无法使用资源文件问题
有时候我们的lib包无法使用资源文件或者依赖之后编译不过,常见有以下几个情况 1、使用了switch case,由于依赖工程中监听事件判断的时候使用了 比如:
switch (v.getId()){
case R.id.activtiy_scale_usb_permission:
break;
}
使用if else代替了
int i = v.getId();
if (i == R.id.activtiy_scale_usb_permission) {}
注意:根本原因是lib库中id不是常量的所以不能使用switch,如果其它地方调用到了这个方法,也要记住是不是这个引起的
关于debug无法显示值的问题
Android stdio IDE环境下debug代码不显示变量值,add to watch无效 解决方案: 修改app.gradle 文件下的testCoverageEnabled为false
buildTypes {
debug {
minifyEnabled false
signingConfig signingConfigs.debug
testCoverageEnabled false
}
}
关于如果A是B的依赖,B是C的依赖,C中引用A中的类时候的问题
1、其实是由于compile 以及 implementation 这个问题引起的 implementation引入的包只给当前项目用 而compile引入的包不止给当前项目用 2、在Google IO 相关话题的中提到了一个建议, 就是依赖首先应该设置为implement的,如果没有错,那就用implement, 如果有错,那么使用api指令,这样会使编译速度有所增快。
关于aar的包的问题
- moudle中的lib文件夹下的jar,aar和远程依赖必须用api引用否则APP依赖module后无法使用
- 如果moudle打包为aar给demo使用,则moudle中包含的aar和远程库无法引用, 必须再次导入demo中(应该是机制本身的原因,aar中无法引用aar和远程库)
- 多层级Module对aar引用问题:
Failed to resolve::mylibrary-release
现象:有个aar文件放到ModuleA,ModuleB依赖ModuleA则会在编译过程中发生找不到aar文件的异常(同样如果ModuleC依赖ModuleB,也会有找不到这个aar文件的异常(ModuleC等下也是跟ModuleB一样处理))
解决:
i. 在ModuleB的build.gradle的dependencies中加入compile(name:'svprogresshud-release', ext: 'aar');
ii. 在ModuleB的build.gradle的android中加入
repositories{
flatDir{
//前面的是ModuleA的文件夹;后面的是本身ModuleB的
dirs '../common/libs', 'libs'
}
}
关于mainfest问题
Manifest merger failed with multiple errors
可以看到是AndroidManifest出错
打开AndroidManifest,切换到Merged Manifest,可以查看报错信息
关于NormalDemocompile Classpath问题
Unable to resolve dependency for ':face@NormalDemo/compileClasspath': Could not resolve project :aliveDetect.
<a href="openFile:E:/ProjectLandi/LandiTool/ScanFaceTool/face/build.gradle">Open File</a>
<br>
<a href="Unable to resolve dependency for ':face@NormalDemo/compileClasspath': Could not resolve project :aliveDetect.">Show Details</a>
Unable to resolve dependency for ':face@NormalDemoUnitTest/compileClasspath': Could not resolve project :aliveDetect.
<a href="openFile:E:/ProjectLandi/LandiTool/ScanFaceTool/face/build.gradle">Open File</a>
<br>
<a href="Unable to resolve dependency for ':face@NormalDemoUnitTest/compileClasspath': Could not resolve project :aliveDetect.">Show Details</a>
答案:
出现以上情况就是因为Could not resolve project :aliveDetect.这个工程下的gradle有问题,配置跟宿主工程有点不一样才会造成这样的
aliveDetect的gradle下面是这样的:
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
app的gradle下面是这样的:
buildTypes {
debug({
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.config
})
demo({
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.config
})
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.config
}
}
注意到是因为app的build.gradle中多了一个demo,,,,,,就是这个demo引起的要么删除 要么就给我在aliveDetect这个地方添加,这样就不会有错误了,也可以编译过去
不会造成 编译之后出现Try Again Open Messages View Show Log in Explorer.
关于transformClassesWithInstantRunForNormalDebug问题
java.lang.RuntimeException: com.android.build.api.transform.TransformException: java.lang.RuntimeException:Failed to find byte code for java/awt/RenderingHints$Key com.android.build.api.transform.TransformException: java.io.IOException: Failed to find byte code for java/awt/RenderingHints$Key
切记这个要一致:
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
关于 Android Studio 的相关问题
- 代码报红色错误,但是可以运行的问题
尝试以下步骤:
- 使用自带的清除缓存功能
AS--》File--》Invalidate Caches/Restart...
- 删除工程目录下
.gradle和.idea
关闭 AS,进入工程根目录,删除.gradle、.idea,重新打开 AS
- 如果 1、2 不起效,那么删除
.AndoridStudio下除了config外的所有目录
路径C:\Users\Administrator\.AndroidStudio3.1\system,删除system
- 删除 user 目录下
.gradle
路径C:\Users\Administrator\.gradle,删除.gradle
- 如果上面的步骤还是不行。删除项目重新checkout一份(项目名称改成不一样的)
- AS Plugin3.0.0 Gradle-
javaCompileOptions.annotationProcessorOptions
在 app 的 build.gradle 中:在 android--》defaultConfig 内添加以下
javaCompileOptions.annotationProcessorOptions.includeCompileClasspath = true
so库重复问题
现象:报More than one file was found with OS independent path 'lib/arm64-v8a/libpl_droidsonroids_gif.so'
原因:so库重复了
解决:
方法一:在app的build.gradle中加入
android {
...
// 解决资源重复问题
packagingOptions {
exclude 'lib/mips/libpl_droidsonroids_gif.so'
}
}
方法二:如果方法一不起效,查看build.gradle中添加的依赖库和libs中的库是否重复了,如果重复了那么把libs中的库删除即可。