至于普通的平常的打包混淆,网上好多教程,也就不废话了。(记得添加作者的proguard-rules.pro的混淆规则)
再在自己的proguard-rules.pro中添加
-keep class 自己的包名.app.GlobalConfiguration -keep class 自己的包名.app.GlobalHttpHandlerImpl -keep class 自己的包名.app.ResponseErrorListenerImpl
--原因是因为这几个类是使用反射的原理(貌似是这样,记不清)
打包成功,如果运行报错 出现 java.lang.NoClassDefFoundError 错误,就按作者给出的解决方案
在 Android 4.4 或以下版本如果突然出现 java.lang.NoClassDefFoundError 错误, 或者 java.lang.ClassNotFoundException 异常, 以及无缘无故提示 Unable to find ConfigModule 异常, 请根据这个 解决方案 处理, 也可以尝试下这个比较 简便的方式
如果在 Android 5.0 或以上版本出现以上问题, 请在接入 com.android.support:multidex:x.y.z 后, 在当前 Module 的 build.gradle 中加入以下代码:
dexOptions {
javaMaxHeapSize "4g"
jumboMode = true
preDexLibraries = false
additionalParameters = [
'--multi-dex',//多分包
'--set-max-idx-number=60000'//每个包内方法数上限
]
}
这就应该可以解决大多数的报错
而我的报错,却很奇葩
Caused by: java.lang.IllegalStateException: java.lang.ClassNotFoundException: com.jess.arms.base.BaseApplication
at com.tencent.bugly.beta.tinker.TinkerPatchReflectApplication.attachBaseContext(BUGLY:12)
at android.app.Application.attach(Application.java:189)
at android.app.Instrumentation.newApplication(Instrumentation.java:1102)
at android.app.Instrumentation.newApplication(Instrumentation.java:1086)
at android.app.LoadedApk.makeApplication(LoadedApk.java:965)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5765)
at android.app.ActivityThread.-wrap1(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1661)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
找不到BaseApplication的类
试了好多方法就是不行,我以为是mvparms没有支持androidx(这个项目是使用androidx)。因为我记得作者因为第三方库的原因没有支持adnroidx的,不过我看到了这篇文章《AndroidStudio 一键迁移至 AndroidX》,就明白了,mvparms是支持androdx的。当我要放弃的时候,偶然看到了作者在别的文章上的回答,才恍然大悟。
在proguard-rules.pro中添加添加
-keep class com.jess.arms.base.BaseApplication
问题解决,项目就跑起来了。
这个问题只适合我的错误,并不能解决所有,但是给我提供了一种解决问题的方式!