-
Notifications
You must be signed in to change notification settings - Fork 93
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
release 混淆报错 #55
Comments
这个问题有点奇怪,我自己用着没有问题,本库的示例代码直接混淆也能正常运行。我的库目前有上千个人用,有少数几个人跟我反馈过混淆问题,不清楚是什么原因导致的。 |
还是不行 |
以下是项目的混淆规则 #忽略警告 代码混淆压缩比,在0~7之间-optimizationpasses 5 混合时不使用大小写混合,混合后的类名为小写-dontusemixedcaseclassnames 指定不去忽略非公共库的类-dontskipnonpubliclibraryclasses 指定不忽略包可见的库类成员(字段和方法)。默认地,当解析库类的时候ProGuard会跳过这些类成员,项目类一般不会去引用它们。然而有的时候,程序里的类相当于库类存在于相同包。此时它们会引用他们的包可见的类成员。在这种情况下为了保持程序代码保持一致性去读取这些类的成员是有用的。-dontskipnonpubliclibraryclassmembers 不做预校验,preverify是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度。-dontpreverify #指定处理期间打印更多相关信息 -printmapping proguardMapping.txt #指定要启用和禁用的优化,在更精细的水平。只有当优化适用。 混淆时采用的算法(google推荐,一般不改变) 避免混淆Annotation、内部类-keepattributes Annotation,InnerClasses 避免混淆泛型-keepattributes Signature 抛出异常时保留代码行号-keepattributes SourceFile,LineNumberTable #---------------------------------------------------------------------------- #---------------------------------默认保留区--------------------------------- -keep public class * extends android.app.Activity -keepclassmembers class * extends android.app.Activity{ -keepclassmembers enum * { -keep public class * extends android.view.View{ -keepclasseswithmembers class * { -keep class * implements android.os.Parcelable { -keepclassmembers class * implements java.io.Serializable { -keep class *.R$ { *; } -keepclassmembers class * { #---------------------------------------------------------------------------- #---------------------------------webview------------------------------------ -keepclassmembers class fqcn.of.javascript.interface.for.Webview { -keepclassmembers class * extends android.webkit.WebViewClient { -keepclassmembers class * extends android.webkit.WebViewClient { #---------------------------------------------------------------------------- #-------------------------------------------定制化区域---------------------------------------------- #---------------------------------1.实体类--------------------------------- -keep class com.android.sms.entity.** { *; } #------------------------------------------------------------------------- #---------------------------------2.第三方包------------------------------- #XPopup #------------------------------------------------------------------------- #---------------------------------3.与js互相调用的类------------------------ #------------------------------------------------------------------------- #---------------------------------4.反射相关的类和方法----------------------- #-keep public class * extends cc.jianke.mvvmmodule.mvvm.BaseViewModel { *; } -keepclassmembers class * implements androidx.viewbinding.ViewBinding { #---------------------------------------------------------------------------- |
有一种情况,使用腾讯的资源混淆会出现该问题,将布局添加到白名单就可以了 |
我也出现了这个问题,是今天升级了AGP 7.1.2 用上JAVA11才出现的 |
现在作者的DEMO 是gradle:4.2.1 + 6.7.1 我之前是这个版本也是没问题的 到了7.0+才出现混淆问题 |
排除到了问题 我也是项目用了hilt 升级到2.41问题解决 |
建一个APG7.2.0 + Gradle-7.4.2的新项目时也碰到了这个问题, 单参数inflate没问题,3参数的就找不到,但是反编译是可以看到method的 暂时还没有解决,3参数的inflate换成非反射的方案先用着了 |
遇到同样的问题。。加混淆也没用 |
@kuroyukihime0 @DylanCaiCoding @bill556
很奇怪,用反射的方式,我是在使用封装在基类 agp: 7.2.1 kotlin:1.6.21 |
个人测试了把项目代码升级成 Gradle 7.1.2 没有出现混淆问题,代码已上传到了 gradle7 分支,大家可以切换分支运行 release 验证一下。 Gradle 7.2 好像要升级成花栗鼠版本才能使用,由于看到很多人使用花栗鼠版本遇到问题,个人一直没升级。是否在 Gradle 7.2 有混淆问题,个人还没验证,可以尝试降成 7.1.2 (gradle-7.2-bin.zip) 看下问题能否解决。如果还是不行,可能需要找下其它原因,比如目前为止有过 3 个人和我反馈把 hilt 升级到 2.41 解决了。 |
同样3个参数混淆问题,gradle版本7.3.3 |
遇到同样的问题。gradle-7.3.3。没有使用hilt |
遇到同样的问题。gradle-7.2.1。没有使用hilt |
-keepclassmembers class * implements androidx.viewbinding.ViewBinding {
public static ** bind(***);
public static ** inflate(...);
}``` |
遇到同样问题,gradle-7.0.2,加了这个已解决 |
非常简单的反射封装,如果MainActivity调用了binding.root或者binding.(任意view)不会崩溃,否则就会报NoSuchMethodException
这是什么原因?
|
解决办法
|
AGP 8以上,因为android.enableR8.fullMode会强制开启,还需要加上以下三行 -keep class * implements androidx.viewbinding.ViewBinding {*;} -keepclassmembers class * implements androidx.viewbinding.ViewBinding { -keep,allowobfuscation,allowshrinking class 你的包名. BaseBindingActivity |
测试发现: 如果Activity继承BaseBindingActivity,且此Activity上有个hilt注解 我用的hilt版本是2.48.1 |
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.android.sms, PID: 4568
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.sms/com.android.sms.ui.splash.SplashActivity}: java.lang.IllegalArgumentException: There is no generic of ViewBinding.
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3752)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3920)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2345)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:264)
at android.app.ActivityThread.main(ActivityThread.java:8268)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:632)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1049)
Caused by: java.lang.IllegalArgumentException: There is no generic of ViewBinding.
at p1.a.b(ViewBindingUtil.kt:90)
at p1.a.a(ViewBindingUtil.kt:35)
at cc.jianke.mvvmmodule.viewbinding.BaseViewBindingActivity.onCreate(BaseViewBindingActivity.kt:20)
at android.app.Activity.performCreate(Activity.java:8151)
at android.app.Activity.performCreate(Activity.java:8135)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3721)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3920)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2345)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:264)
at android.app.ActivityThread.main(ActivityThread.java:8268)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:632)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1049)
The text was updated successfully, but these errors were encountered: