JessYanCoding / MVPArms

⚔️ A common architecture for Android applications developing based on MVP, integrates many open source projects, to make your developing quicker and easier (一个整合了大量主流开源项目高度可配置化的 Android MVP 快速集成框架).
Apache License 2.0
10.29k stars 2.39k forks source link

demo混淆后,提示Binary XML file line #24: Binary XML file line #24: Error inflating class LinearLayout #388

Open AndryYu opened 3 years ago

AndryYu commented 3 years ago

Look at here

Environment

Bug Description:

对demo proguard-rules.txt按照module里面的混淆文件配置,并且加上-keep class me.jessyan.mvparms.demo.* { ; }配置。运行demo,提示Binary XML file line #24: Binary XML file line #24: Error inflating class LinearLayout异常。

deBug Description:

  1. 自己项目里面混淆也提示这个问题,并且xml 24 line 没有LinearLayout。
  2. demo里面LinearLayout的闭合是在25line,为了验证错误是否跟LinearLayout 有关,在activity_user.xml中添加了一个Textview控件,移动LinearLayout的位置,但错误提示依旧定位在24 line。

proguard-rules Code:

-optimizationpasses 5

-dontusemixedcaseclassnames

-dontskipnonpubliclibraryclasses

-dontskipnonpubliclibraryclassmembers

-dontpreverify

-verbose -printmapping priguardMapping.txt

-optimizations !code/simplification/artithmetic,!field/,!class/merging/

################common###############

-keep public class * implements com.jess.arms.integration.ConfigModule

实体类不参与混淆

-keep class com.jess.arms.widget. { ; } #自定义控件不参与混淆 -keep class implements android.os.Parcelable { public static final android.os.Parcelable$Creator ; } -keepnames class implements java.io.Serializable -keepattributes Signature -keep class .R$ {;} -ignorewarnings -keepclassmembers class *.R$ { public static ; }

-keepclasseswithmembernames class * { # 保持native方法不被混淆 native ; }

-keepclassmembers enum * { # 使用enum类型时需要注意避免以下两个方法混淆,因为enum类的特殊性,以下两个方法会被反射调用, public static [] values(); public static valueOf(java.lang.String); }

################support############### -keep class android.support. { *; } -keep interface android.support.* { ; } -dontwarn android.support.

################alipay###############

-keep class com.alipay.android.app.IAlixPay{;} -keep class com.alipay.android.app.IAlixPay$Stub{;} -keep class com.alipay.android.app.IRemoteServiceCallback{;} -keep class com.alipay.android.app.IRemoteServiceCallback$Stub{;} -keep class com.alipay.sdk.app.PayTask{ public ;} -keep class com.alipay.sdk.app.AuthTask{ public ;}

################retrofit############### -dontwarn retrofit2. -keep class retrofit2. { *; } -keepattributes Signature -keepattributes Exceptions

################butterknife############### -keep class butterknife.* { ; } -dontwarn butterknife.internal. -keep class $$ViewBinder { ; } -keepclasseswithmembernames class { @butterknife. ; } -keepclasseswithmembernames class { @butterknife.* ; }

################gson############### -keepattributes Signature -keepattributes Annotation -keep class sun.misc.Unsafe { *; } -keep class com.google.gson.stream.* { ; }

Application classes that will be serialized/deserialized over Gson

-keep class com.sunloto.shandong.bean.* { ; }

################glide############### -keep public class implements com.bumptech.glide.module.AppGlideModule -keep public class implements com.bumptech.glide.module.LibraryGlideModule -keep class com.bumptech.glide.* { ; } -keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$ { [] $VALUES; public *; }

################okhttp############### -keepattributes Signature -keepattributes Annotation -keep class com.squareup.okhttp. { *; } -keep interface com.squareup.okhttp.* { ; } -keep class okhttp3. { *; } -keep interface okhttp3.* { ; } -dontwarn com.squareup.okhttp.**

################androidEventBus############### -keep class org.simple.* { ; } -keep interface org.simple.* { ; } -keepclassmembers class { @org.simple.eventbus.Subscriber ; } -keepattributes Annotation*

################EventBus############### -keepclassmembers class { @org.greenrobot.eventbus.Subscribe ; } -keep class org.greenrobot.eventbus.EventBus { ; } -keep enum org.greenrobot.eventbus.ThreadMode { *; }

-keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent {

(java.lang.Throwable); } ################autolayout############### -keep class com.zhy.autolayout.** { *; } -keep interface com.zhy.autolayout.** { *; } ################RxJava and RxAndroid############### -dontwarn org.mockito.** -dontwarn org.junit.** -dontwarn org.robolectric.** -keep class io.reactivex.** { *; } -keep interface io.reactivex.** { *; } -keepattributes Signature -keepattributes *Annotation* -keep class com.squareup.okhttp.** { *; } -dontwarn okio.** -keep interface com.squareup.okhttp.** { *; } -dontwarn com.squareup.okhttp.** -dontwarn io.reactivex.** -dontwarn retrofit.** -keep class retrofit.** { *; } -keepclasseswithmembers class * { @retrofit.http.* ; } -keep class sun.misc.Unsafe { *; } -dontwarn java.lang.invoke.* -keep class io.reactivex.schedulers.Schedulers { public static ; } -keep class io.reactivex.schedulers.ImmediateScheduler { public ; } -keep class io.reactivex.schedulers.TestScheduler { public ; } -keep class io.reactivex.schedulers.Schedulers { public static ** test(); } -keepclassmembers class io.reactivex.internal.util.unsafe.*ArrayQueue*Field* { long producerIndex; long consumerIndex; } -keepclassmembers class io.reactivex.internal.util.unsafe.BaseLinkedQueueProducerNodeRef { long producerNode; long consumerNode; } -keepclassmembers class io.reactivex.internal.util.unsafe.BaseLinkedQueueProducerNodeRef { io.reactivex.internal.util.atomic.LinkedQueueNode producerNode; } -keepclassmembers class io.reactivex.internal.util.unsafe.BaseLinkedQueueConsumerNodeRef { io.reactivex.internal.util.atomic.LinkedQueueNode consumerNode; } -dontwarn io.reactivex.internal.util.unsafe.** ################espresso############### -keep class android.support.test.espresso.** { *; } -keep interface android.support.test.espresso.** { *; } ################annotation############### -keep class android.support.annotation.** { *; } -keep interface android.support.annotation.** { *; } ################RxLifeCycle################# -keep class com.trello.rxlifecycle2.** { *; } -keep interface com.trello.rxlifecycle2.** { *; } ################RxPermissions################# -keep class com.tbruyelle.rxpermissions2.** { *; } -keep interface com.tbruyelle.rxpermissions2.** { *; } ################RxCache################# -dontwarn io.rx_cache2.internal.** -keep class io.rx_cache2.internal.Record { *; } -keep class io.rx_cache2.Source { *; } -keep class io.victoralbertos.jolyglot.** { *; } -keep interface io.victoralbertos.jolyglot.** { *; } ################RxErrorHandler################# -keep class me.jessyan.rxerrorhandler.** { *; } -keep interface me.jessyan.rxerrorhandler.** { *; } ################Timber################# -dontwarn org.jetbrains.annotations.** ################Canary################# -dontwarn com.squareup.haha.guava.** -dontwarn com.squareup.haha.perflib.** -dontwarn com.squareup.haha.trove.** -dontwarn com.squareup.leakcanary.** -keep class com.squareup.haha.** { *; } -keep class com.squareup.leakcanary.** { *; } # Marshmallow removed Notification.setLatestEventInfo() -dontwarn android.app.Notification ## 不混淆demo代码 -keep class me.jessyan.mvparms.demo.** { *; } ### Bug Log: 2020-12-29 16:35:07.682 15617-15617/? E/AndroidRuntime: FATAL EXCEPTION: main Process: me.jessyan.mvparms.demo, PID: 15617 java.lang.RuntimeException: Unable to start activity ComponentInfo{me.jessyan.mvparms.demo/me.jessyan.mvparms.demo.mvp.ui.activity.UserActivity}: android.view.InflateException: Binary XML file line #24: Binary XML file line #24: Error inflating class LinearLayout at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2917) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2978) at android.app.ActivityThread.-wrap14(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1628) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6646) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358) Caused by: android.view.InflateException: Binary XML file line #24: Binary XML file line #24: Error inflating class LinearLayout Caused by: android.view.InflateException: Binary XML file line #24: Error inflating class LinearLayout Caused by: java.lang.NullPointerException: throw with null exception at com.jess.arms.d.i.a() at com.jess.arms.base.c.onCreateView(:89) at android.app.Activity.onCreateView(Activity.java:6062) at androidx.fragment.app.b.onCreateView(:338) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:784) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:734) at android.view.LayoutInflater.inflate(LayoutInflater.java:496) at android.view.LayoutInflater.inflate(LayoutInflater.java:427) at android.view.LayoutInflater.inflate(LayoutInflater.java:378) at com.android.internal.policy.DecorView.onResourcesLoaded(DecorView.java:2172) at com.android.internal.policy.PhoneWindow.generateLayout(PhoneWindow.java:2777) at com.android.internal.policy.PhoneWindow.installDecor(PhoneWindow.java:2850) at com.android.internal.policy.PhoneWindow.getDecorView(PhoneWindow.java:2160) at androidx.appcompat.app.AppCompatDelegateImpl.z(:717) at androidx.appcompat.app.AppCompatDelegateImpl.A(:659) at androidx.appcompat.app.AppCompatDelegateImpl.c(:552) at androidx.appcompat.app.d.setContentView(:161) at com.jess.arms.base.c.onCreate(:100) at android.app.Activity.performCreate(Activity.java:6912) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1126) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2870) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2978) at android.app.ActivityThread.-wrap14(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1628) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6646) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358) ### Others:
Jay-ch commented 3 years ago

同问,刚刚遇到同样的问题,签名打正式包就报这个错,debug不报错

JessYanCoding commented 3 years ago

https://github.com/JessYanCoding/MVPArms/issues/358