安卓其他问题

1,275 阅读5分钟

关于处理客户反馈的问题的步骤

注意:要与客户的场景一致(正式线or测试线、账号密码、门店、操作步骤)

  1. 与IOS比对 1.1 IOS有一样的问题,初步判定是接口问题,抓接口反馈给后台 1.2 IOS正常,安卓重现客户场景     1.2.1 安卓正常:初步判定是版本不同的问题,找旧包抓接口     1.2.2 异常复现:如果有错误日志则通过日志定位问题;如果没有错误日志抓接口给后台

关于gradle相关的问题

  1. 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的包的问题

  1. moudle中的lib文件夹下的jar,aar和远程依赖必须用api引用否则APP依赖module后无法使用
  2. 如果moudle打包为aar给demo使用,则moudle中包含的aar和远程库无法引用, 必须再次导入demo中(应该是机制本身的原因,aar中无法引用aar和远程库)
  3. 多层级Module对aar引用问题: Failed to resolve::mylibrary-release

现象:有个aar文件放到ModuleA,ModuleB依赖ModuleA则会在编译过程中发生找不到aar文件的异常(同样如果ModuleC依赖ModuleB,也会有找不到这个aar文件的异常(ModuleC等下也是跟ModuleB一样处理))

解决:

i. 在ModuleB的build.gradledependencies中加入compile(name:'svprogresshud-release', ext: 'aar')

ii. 在ModuleB的build.gradleandroid中加入

repositories{
	flatDir{
		//前面的是ModuleA的文件夹;后面的是本身ModuleB的
		dirs '../common/libs', 'libs'
	}
}

关于mainfest问题

Manifest merger failed with multiple errors 可以看到是AndroidManifest出错 打开AndroidManifest,切换到Merged Manifest,可以查看报错信息

关于NormalDemocompile Classpath问题

  1. 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 &#39;:face@NormalDemo/compileClasspath&#39;: Could not resolve project :aliveDetect.">Show Details</a>
  1. 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 &#39;:face@NormalDemoUnitTest/compileClasspath&#39;: Could not resolve project :aliveDetect.">Show Details</a>

答案: 出现以上情况就是因为Could not resolve project :aliveDetect.这个工程下的gradle有问题,配置跟宿主工程有点不一样才会造成这样的 aliveDetectgradle下面是这样的:

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
	      }
	  }

注意到是因为appbuild.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 的相关问题

  • 代码报红色错误,但是可以运行的问题

尝试以下步骤:

  1. 使用自带的清除缓存功能

AS--》File--》Invalidate Caches/Restart...

  1. 删除工程目录下.gradle.idea

关闭 AS,进入工程根目录,删除.gradle.idea,重新打开 AS

  1. 如果 1、2 不起效,那么删除.AndoridStudio下除了config外的所有目录

路径C:\Users\Administrator\.AndroidStudio3.1\system,删除system

  1. 删除 user 目录下.gradle

路径C:\Users\Administrator\.gradle,删除.gradle

  1. 如果上面的步骤还是不行。删除项目重新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中的库删除即可。

"惜梦"整理的Android开发错误集锦