![](/img/trans.png)
[英]Android App crashes in the release build due to NullPointerException when setting minifyEnabled to true and shrinkResources to true
[英]Android minifyEnabled = true shrinkResources = true keep crashing application
在 Google Play Publish 網站中獲得以下異常。 如果我 minifyEnabled 假收縮資源 = 假。 應用程序工作正常。
FATAL EXCEPTION: ControllerMessenger
Process: MyApp, PID: 27778
java.lang.RuntimeException: Unable to start activity ComponentInfo{MyApp/MyApp.GridLayoutActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2955)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3030)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696)
at android.os.Handler.dispatchMessage(Handler.java:105)
at androidx.test.espresso.base.Interrogator.a(Interrogator.java:19)
at androidx.test.espresso.base.UiControllerImpl.a(UiControllerImpl.java:166)
at androidx.test.espresso.base.UiControllerImpl.a(UiControllerImpl.java:158)
at androidx.test.espresso.base.UiControllerImpl.a(UiControllerImpl.java:34)
at androidx.test.espresso.action.MotionEvents.a(MotionEvents.java:77)
at androidx.test.espresso.action.MotionEvents.a(MotionEvents.java:52)
at androidx.test.espresso.action.Tap.c(Tap.java:8)
at androidx.test.espresso.action.Tap.b(Tap.java:18)
at androidx.test.espresso.action.Tap$1.a(Tap.java:3)
at androidx.test.espresso.action.GeneralClickAction.perform(GeneralClickAction.java:20)
at androidx.test.espresso.ViewInteraction$SingleExecutionViewAction.perform(ViewInteraction.java:9)
at androidx.test.espresso.ViewInteraction.a(ViewInteraction.java:79)
at androidx.test.espresso.ViewInteraction.a(ViewInteraction.java:96)
at androidx.test.espresso.ViewInteraction$1.call(ViewInteraction.java:3)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6938)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
proguard-rules.pro - 我添加了一些保留但仍然無法正常工作
-keepclassmembers class android.support.design.internal.BottomNavigationMenuView {
boolean mShiftingMode;
}
-keep class com.shockwave.**
-keep class android.support.v7.widget.SearchView { *; }
-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.** { *; }
-keep class io.flutter.util.** { *; }
-keep class io.flutter.view.** { *; }
-keep class io.flutter.** { *; }
-keep class io.flutter.plugins.** { *; }
-keep class vn.hunghd.flutterdownloader.** { *; }
-keep class com.baseflow.permissionhandler.** { *; }
build.gradle - 我嘗試使用 minifyEnabled false 和 shrinkResources false 然后它工作正常。
useLibrary 'org.apache.http.legacy'
defaultConfig {
applicationId 'MyApp'
minSdkVersion 24
targetSdkVersion 26
versionCode 36
versionName "0.81"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled true
useProguard true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.BethakjiAppSign
android.applicationVariants.all { variant ->
variant.outputs.all {
outputFileName = "${applicationId}.apk"
}
}
}
}
嘗試在 proguard 中為java.lang
添加規則。 像這樣的東西:
-keep class java.lang.** { *; }
它在調試模式下工作,因為應用程序沒有使用發布證書簽名。 如果您從 Android Studio 運行發布版本,則可以在發布之前測試發布版本。 這樣,應用程序將被簽名,您可以在您的設備上運行它並通過應用程序。 根據您使用的庫,您可能需要向 proguard 添加更多規則。
你需要把你的 /proguard-rules.pro 改成這個。
#Flutter Wrapper
-keep class com.shockwave.**
-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.** { *; }
-keep class io.flutter.util.** { *; }
-keep class io.flutter.view.** { *; }
-keep class io.flutter.** { *; }
-keep class io.flutter.plugins.** { *; }
並在 /android/app/build.gradle 添加這個。
buildTypes {
release {
signingConfig signingConfigs.debug
minifyEnabled true
shrinkResources false
useProguard true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.