Tinker生成Patch包时报错:
Warning:ignoreWarning is false, but we found loader classes are found in old secondary dex. Found classes: {Lcom/tencent/tinker/loader/hotplug/ActivityStubs$SIStub_01;,Lco......
前提:你是不是直接在AS中点击的Run按钮运行的Base包?然后看包结构Tinker的loader始终在classes2.dex中。
1.【先提供别人的解决思路】
有没有尝试在app module下写一个maindexlist.txt,
<<****你自己的Application.class>>
<<*****TinkerApplicationLike.class>>
com/tencent/tinker/loader/hotplug/ActivityStubs$SIStub_01
com/tencent/tinker/loader/shareutil/ShareResPatchInfo
com/tencent/tinker/loader/SystemClassLoaderAdder$V23
com/tencent/tinker/loader/hotplug/ActivityStubManager
com/tencent/tinker/loader/shareutil/ShareOatUtil$1
com/tencent/tinker/loader/shareutil/ShareOatUtil
com/tencent/tinker/loader/shareutil/SharePatchFileUtil
com/tencent/tinker/loader/shareutil/ShareFileLockHelper
com/tencent/tinker/loader/hotplug/ActivityStubs$SGTKStub_04
com/tencent/tinker/loader/TinkerDexOptimizer$StreamConsumer$1
com/tencent/tinker/loader/TinkerDexLoader
com/tencent/tinker/loader/hotplug/ActivityStubs$STDStub_06
.....等等等
然后:1.1【方式1】:
dexOptions {
jumboMode = true
// preDexLibraries = false
javaMaxHeapSize "2g" //增加java堆内存大小
additionalParameters = ['--multi-dex','--set-max-idx-number=60000','--main-dex-list='+projectDir+'/maindexlist.txt', '--minimal-main-dex']
additionalParameters = ['--set-max-idx-number=65000', '--num-threads=4', '--minimal-main-dex']
}
1.2【方式2】:
buildTypes {
debug {
debuggable true
minifyEnabled false
multiDexKeepFile file('maindexlist.txt')
// signingConfig signingConfigs.debug
}
release {
multiDexKeepFile file("maindexlist.txt")
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
最后发现两个方式都不好用,dex的包中依然把Tinker的load放到了classes2.dex中,最后甚至dexKnife都用上了,还是会报错。
该解决方式引用地址:https://blog.csdn.net/qq_29870299/article/details/84194002
2.【我的解决方式如下,核心思想:用命令行去打包!!!!!!举例是debug包】
1:生成Base包用:./gradlew assembleDebug
2:生成Patch包用:./gradlew tinkerPatchDebug
ps:1.7.6版本后的话,不用刻意去设置app下build.gradle中的loader;
ps:另外,注意手机读写动态权限的申请!!!否则会让你很挠头,找不到问题所在。
ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},12); //8.0需要动态权限申请