gradle 任务中断后,再次执行命令会被 block 的解决方法:
./gradlew --status PID STATUS INFO 8210 STOPPED 4.4 9320 IDLE 4.4
kill 8210 // 干掉 stopped的进程就可以了.
gradle 编译出现 oom 的问题
vim ~/.gradle/gradle.properties 增加: org.gradle.jvmargs=-Xmx4096M 参考链接
小知识点
-
子 module 的包名不能相同, 否则会生成重复的两个 BuildConfig 无法编译通过
-
gradle 配置增加的 aar 依赖找不到需要在 app 的 build.gradle 中也配置一下参考链接
D8: Program type already present
Caused by: com.android.tools.r8.CompilationFailedException: Compilation failed to complete
at com.android.tools.r8.utils.ExceptionUtils.withCompilationHandler(ExceptionUtils.java:76)
at com.android.tools.r8.utils.ExceptionUtils.withD8CompilationHandler(ExceptionUtils.java:45)
at com.android.tools.r8.D8.run(D8.java:67)
at com.android.builder.dexing.D8DexArchiveMerger.mergeDexArchives(D8DexArchiveMerger.java:107)
... 7 more
Caused by: com.android.tools.r8.utils.AbortException
at com.android.tools.r8.utils.Reporter.failIfPending
Caused by: com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives:
> Task :app:transformDexArchiveWithDexMergerFor DebugQA FAILED
出现此 trace 通常是因为重复依赖, 可搜索 以下关键字查看重复类:
D8: Program type already present: xxxClass
根据重复类, 解决重复依赖编译的问题.
查看 lib 依赖关系
./gradlew -q app:dependencies
有些传递依赖标注了*号,表示这个依赖被忽略了,这是因为其他顶级依赖中也依赖了这个传递的依赖,Gradle会自动分析下载最合适的依赖。有些依赖形如22.2.1 ->23.1.1是由于默认会优先版本高的依赖.这个时候你想使用版本低的依赖的话需要排除掉高的依赖。
64K 方法数问题
change api or implementation to compileOnly if possible.
error
12-13 16:38:09.673 E/CrashReport( 6074): at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:91)
12-13 16:38:09.673 E/CrashReport( 6074): at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:45)
12-13 16:38:09.673 E/CrashReport( 6074): at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
12-13 16:38:09.673 E/CrashReport( 6074): at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
12-13 16:38:09.673 E/CrashReport( 6074): at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:93)
猜测 ClassLoader 不同导致的无法转换, 追加 log 查看这两个 class 的 ClassLoader:
ClassLoader of StethoInterceptor: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.lianjia.beike-1/base.apk"],nativeLibraryDirectories=[/data/app/com.lianjia.beike-1/lib/arm, /system/fake-libs, /data/app/com.lianjia.beike-1/base.apk!/lib/armeabi, /system/lib, /vendor/lib]]]
ClassLoader of Interceptor: com.ke.ljplugin.PluginDexClassLoader[DexPathList[[zip file "/data/user/0/com.lianjia.beike/app_p_a/609796977.jar"],nativeLibraryDirectories=[/data/user/0/com.lianjia.beike/app_p_n/609796977, /system/lib, /vendor/lib]]]
正常情况下? Interceptor应该由宿主加载,此处却是由插件加载的,说明插件编译时将Interceptor加入了编译. Interceptor 所在 lib 为 com.squareup.okhttp3:okhttp. 通过命令查看 project 的依赖关系:
段落引用 debugQARuntimeClasspath - Resolved configuration for runtime for variant: debugQA +--- project :homelink | +--- com.lianjia.common.android:ljplugin-plugin-lib:1.0.3-SNAPSHOT | +--- project :midlib | | --- com.lianjia.common.android:lib_utils:1.8.2-SNAPSHOT | | +--- com.android.support:support-v4:25.3.1 | | | +--- com.android.support:support-compat:25.3.1 | | | | --- com.android.support:support-annotations:25.3.1 | | | +--- com.android.support:support-media-compat:25.3.1 | | | | +--- com.android.support:support-annotations:25.3.1 | | | | --- com.android.support:support-compat:25.3.1 () | | | +--- com.android.support:support-core-utils:25.3.1 | | | | +--- com.android.support:support-annotations:25.3.1 | | | | --- com.android.support:support-compat:25.3.1 () | | | +--- com.android.support:support-core-ui:25.3.1 | | | | +--- com.android.support:support-annotations:25.3.1 | | | | --- com.android.support:support-compat:25.3.1 () | | | --- com.android.support:support-fragment:25.3.1 | | | +--- com.android.support:support-compat:25.3.1 () | | | +--- com.android.support:support-media-compat:25.3.1 () | | | +--- com.android.support:support-core-ui:25.3.1 () | | | --- com.android.support:support-core-utils:25.3.1 () | | +--- io.reactivex:rxjava:1.2.9 | | +--- io.reactivex:rxandroid:1.2.1 | | | --- io.reactivex:rxjava:1.1.6 -> 1.2.9 | | --- com.google.code.gson:gson:2.7 | +--- :indexlib-release | +--- :card-release | +--- :liveness-interactive-online-release_v3_6 | +--- com.android.support:cardview-v7:25.3.1 | | --- com.android.support:support-annotations:25.3.1 | +--- com.lianjia.soundlib:LJVRRecord:1.2.0 | | +--- com.lianjia:httpservice:1.5.5 -> 1.5.6 | | | +--- com.google.code.gson:gson:2.7 | | | +--- com.squareup.retrofit2:retrofit:2.1.0 | | | | --- com.squareup.okhttp3:okhttp:3.3.0 -> 3.5.0 | | | | --- com.squareup.okio:okio:1.11.0 | | | +--- **com.squareup.okhttp3:okhttp:3.5.0 ()** | | | +--- io.reactivex:rxjava:1.2.9 | | | --- io.reactivex:rxandroid:1.2.1 () | | --- com.lianjia.soundlib:MP3Recorder:1.2.0 | | --- com.lianjia.common.android:lib_utils:1.7.0 -> 1.8.2-SNAPSHOT () | +--- com.lianjia.common.android:lib_vr:1.6.8-SNAPSHOT | | +--- com.android.support:support-v4:25.3.1 () | | +--- com.android.support:appcompat-v7:25.3.1 | | | +--- com.android.support:support-annotations:25.3.1 | | | +--- com.android.support:support-v4:25.3.1 () | | | +--- com.android.support:support-vector-drawable:25.3.1 | | | | +--- com.android.support:support-annotations:25.3.1 | | | | --- com.android.support:support-compat:25.3.1 () | | | --- com.android.support:animated-vector-drawable:25.3.1 | | | --- com.android.support:support-vector-drawable:25.3.1 () | | +--- com.lianjia.common.android:basewebview:1.0.5 | | --- com.lianjia.common.android:VRLoadingViewLib:1.1.0 | +--- com.lianjia.sdk:analytics-visual-mapping:1.3.7 | | +--- com.android.support:appcompat-v7:25.3.1 () | | +--- io.reactivex:rxjava:1.2.9 | | +--- io.reactivex:rxandroid:1.2.1 () | | +--- com.jraska:falcon:1.0.4 | | +--- org.greenrobot:eventbus:3.0.0 | | +--- com.lianjia.common.android:lib_ui:1.2.8 | | | +--- com.lianjia.common.android:lib_utils:1.3.0 -> 1.8.2-SNAPSHOT () | | | +--- com.android.support:recyclerview-v7:25.2.0 | | | | +--- com.android.support:support-annotations:25.2.0 -> 25.3.1 | | | | +--- com.android.support:support-compat:25.2.0 -> 25.3.1 () | | | | --- com.android.support:support-core-ui:25.2.0 -> 25.3.1 () | | | +--- com.android.support:support-v4:25.2.0 -> 25.3.1 () | | | +--- in.srain.cube:ultra-ptr:1.0.11 | | | +--- com.squareup.picasso:picasso:2.5.2 | | | --- com.lianjia.common.android:lib_imageloader:0.1.0 | | | +--- com.android.support:support-annotations:23.2.1 -> 25.3.1 | | | --- com.jakewharton.picasso:picasso2-okhttp3-downloader:1.0.2 | | | +--- com.squareup.picasso:picasso:2.5.2 | | | --- com.squareup.okhttp3:okhttp:3.0.1 -> 3.5.0 () | | --- com.lianjia.sdk:analytics-sdk:1.3.3 | | +--- com.android.support:support-annotations:25.3.1 | | +--- com.lianjia.common.android:lib_log:1.1.0 | | | +--- com.lianjia:httpservice:1.5.1 -> 1.5.6 () | | | +--- com.lianjia.common.android:lib_utils:1.4.0 -> 1.8.2-SNAPSHOT () | | | +--- com.lianjia.common.android:lib_xlog:0.9.0 | | | --- com.android.support:support-annotations:25.2.0 -> 25.3.1 | | --- com.lianjia.common.android:lib_dig:1.10.1 | | +--- com.squareup.okhttp3:okhttp:3.5.0 () | | +--- com.squareup.retrofit2:retrofit:2.1.0 () | | +--- com.lianjia.common.android:lib_utils:1.7.0 -> 1.8.2-SNAPSHOT () | | +--- com.lianjia:httpservice:1.5.6 () | | +--- com.lianjia.common.android:lib_log:1.2.1-SNAPSHOT -> 1.1.0 () | | --- com.android.support:support-annotations:25.3.1 | +--- project :core | | +--- com.lianjia.common.android:lib_ui:2.0.0-SNAPSHOT -> 1.2.8 () | | --- project :midlib () | --- project :alivideosdk | +--- :AlivcPlayer | --- :AliyunVodPlayer --- com.bk:bkbase:1.1.0-SNAPSHOT
可以看出部分没有占位编译的 lib 引用了 okhttp,需要在排除编译:
implementation('com.lianjia.soundlib:LJVRRecord:1.2.0@aar') {
**exclude group: "com.squareup.okhttp3", module: "okhttp"**
transitive = true
changing = true
}
error Could not find metadata com.bk:bkbase:2.3.0.2-SNAPSHOT/maven-metadata.xml in remote (file:///Users/luliang/Desktop/mvn) Could not find metadata com.bk:bkbase/maven-metadata.xml in remote (file:///Users/luliang/Desktop/mvn)
可忽略