Skip to content

常见问题与异常自查

乱 edited this page Aug 22, 2019 · 1 revision

SDK热修复使用常见问题

1. 最小版本异常


Error:Execution failed for task ':app:processInternalDebugManifest'.
> Manifest merger failed : uses-sdk:minSdkVersion 14 cannot be smaller than version 16 declared in library [XXX] 
	Suggestion: use tools:overrideLibrary="XXX" to force usage

解决:

在AndroidManifest.xml文件中添加

 <uses-sdk tools:overrideLibrary="XXX" />

其中的xxx.xxx.xxx为第三方库包名,如果存在多个库有此异常,则用逗号分割它们

 <uses-sdk tools:overrideLibrary="XXX,XXX" />

这样做是为了项目中的AndroidManifest.xml和第三方库的AndroidManifest.xml合并时可以忽略最低版本限制

2. AndroidManifest.xml 配置项冲突

Execution failed for task ':app:processDebugManifest'.
> Manifest merger failed : Attribute application@label value=(@string/app_name) from AndroidManifest.xml:16:9-41
  	is also present at [:sdk] AndroidManifest.xml:27:9-28 value=(sdk).
  	Suggestion: add 'tools:replace="android:label"' to <application> element at AndroidManifest.xml:13:5-57:19 to override.

app的AndroidManifest中增加配置

 <application
        tools:replace="android:label">
</application>

3. 合并dex报错

Execution failed for task ':app:transformDexArchiveWithDexMergerForDebug'.
> com.android.build.api.transform.TransformException: java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives:  ...\app\build\intermediates\transforms\dexBuilder\debug\0, 
...\app\build\intermediates\transforms\dexBuilder\debug\1, ...\app\build\intermediates\transforms\externalLibsDexMerger\debug\0, ...\app\build\intermediates\transforms\dexBuilder\debug\3.jar, ...\app\build\intermediates\transforms\dexBuilder\debug\4.jar

在app的build.gradle中加入

 defaultConfig {
        multiDexEnabled true
    }

4. 复制文件异常

Could not copy file '...\sdk\build\intermediates\symbols\release\R.txt' to '

解决: 删除build文件夹,继续打包

5. 关于混淆

  • 如果sdk需要混淆,在robust.xml中配置 <proguard>true</proguard>

在sdk的build中配置

   buildTypes {
       release {
           minifyEnabled true
           proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
       }
   }

且需要把lib-proguard-rules.pro中的配置复制一下到proguard-rules.pro中的配置复制一下到proguard-rules

  • 如果sdk不需要混淆,则在robust.xml中配置 <proguard>false</proguard>

    在sdk的build中配置

   buildTypes {
       release {
           minifyEnabled false
           proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
       }
   }

6. upload异常

Execution failed for task ':sdk:transformResourcesWithMergeJavaResForRelease'.
> Unexpected scopes found in folder 
'...sdk\build\intermediates\transforms\mergeJavaRes\release'. Required: PROJECT. Found: EXTERNAL_LIBRARIES, PROJECT, SUB_PROJECTS

解决: 删除 sdk module下的 build 目录,重新upload即可

7. upload异常2


FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':sdk:transformResourcesWithMergeJavaResForRelease'.
> Unexpected scopes found in folder '...\sdk\build\intermediates\transforms\mergeJavaRes\release'. Required: PROJECT. Found: EXTERNAL_LIBRARIES, PROJECT, SUB_PROJECTS

删除 sdk module下的 build 目录