使用
pytorch_mobile
插件并将 minifyEnabled
和 shrinkResources
设置为 true 启动我的 Flutter 应用程序时,出现以下错误:
...
F/xxx(25186): java_vm_ext.cc:594] JNI DETECTED ERROR IN APPLICATION: JNI NewGlobalRef called with pending exception java.lang.ClassNotFoundException: Didn't find class "org.pytorch.PyTorchAndroid" on path: DexPathList[[zip file "/data/app/~~hrC1Awe0qTN_lMvYeHVsZQ==/xxx-iLzf33Fatdto0s-3rgbmzA==/base.apk"],nativeLibraryDirectories=[/data/app/~~hrC1Awe0qTN_lMvYeHVsZQ==/xxx-iLzf33Fatdto0s-3rgbmzA==/lib/arm64, /data/app/~~hrC1Awe0qTN_lMvYeHVsZQ==/xxx-iLzf33Fatdto0s-3rgbmzA==/base.apk!/lib/arm64-v8a, /system/lib64, /system/system_ext/lib64]]
...
我在
android/app/build.gradle
android.buildTypes
中有以下内容,尝试在发布中解决此问题之前在调试中解决此问题:
...
debug {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
...
我在
proguard-rules.pro
文件中尝试了很多解决方案:
-optimizationpasses 1
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
-dontpreverify
-verbose
-dump class_files.txt
-printseeds seeds.txt
-printusage unused.txt
-printmapping mapping.txt
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-allowaccessmodification
-keepattributes *Annotation*
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable
-repackageclasses ''
-keep class org.pytorch.** { *; }
-keep interface org.pytorch.** { *; }
-keep class io.fynn.pytorch_mobile.** { *; }
-keep interface io.fynn.pytorch_mobile.** { *; }
-keep class io.fynn.pytorch_mobile.** { *; }
-keep interface io.fynn.pytorch_mobile.** { *; }
-keep class io.fynn.** { *; }
-keep interface io.fynn.** { *; }
-keep class libpytorch.** { *; }
-keep interface libpytorch.** { *; }
-keep class libpytorch*.** { *; }
-keep interface libpytorch*.** { *; }
-keep class org.pytorch.proguard.UsedBy*
-keep @org.pytorch.proguard.UsedBy* class * {
<init>();
}
-keepclassmembers class * {
@org.pytorch.proguard.UsedBy* *;
}
-keep class org.pytorch.*
-keep @org.pytorch.* class * { *; }
-keepclassmembers class * {
@org.pytorch.* *;
}
-keep class * {
*;
}
-keep class org.pytorch.** { *; }
-keep class com.facebook.jni.** { *; }
-keep interface org.pytorch.** { *; }
-keep interface com.facebook.jni.** { *; }
-keep class org.pytorch.PyTorchAndroid** { *; }
-keep interface org.pytorch.PyTorchAndroid** { *; }
-keep class org.pytorch.PyTorchAndroid.** { *; }
-keep interface org.pytorch.PyTorchAndroid.** { *; }
-keep class org.pytorch.pytorchandroid** { *; }
-keep interface org.pytorch.pytorchandroid** { *; }
-keep class org.pytorch.pytorchandroid.** { *; }
-keep interface org.pytorch.pytorchandroid.** { *; }
-keep class org.pytorch.jni.** { *; }
-keep interface org.pytorch.jni.** { *; }
-keep class org.pytorch.**
-keep class org.pytorch.*
#-keep class org.pytorch.PyTorchAndroid
#@keep class org.pytorch.** { *; }
#@keep class com.facebook.jni.** { *; }
#@keep interface org.pytorch.** { *; }
#@keep interface com.facebook.jni.** { *; }
#@keep class org.pytorch.PyTorchAndroid** { *; }
#@keep interface org.pytorch.PyTorchAndroid** { *; }
#@keep class org.pytorch.PyTorchAndroid.** { *; }
#@keep interface org.pytorch.PyTorchAndroid.** { *; }
#@keep class org.pytorch.pytorchandroid** { *; }
#@keep interface org.pytorch.pytorchandroid** { *; }
#@keep class org.pytorch.pytorchandroid.** { *; }
#@keep interface org.pytorch.pytorchandroid.** { *; }
#@keep class org.pytorch.jni.** { *; }
#@keep interface org.pytorch.jni.** { *; }
#@keep class org.pytorch.**
#@keep class org.pytorch.*
#@keep class org.pytorch.PyTorchAndroid
-keeppackagenames *pytorch*,*PyTorch*,**pytorch**,**PyTorch**
-libraryjars pytorch_android-1.8.0.aar
但是我仍然收到上述错误并且应用程序崩溃了。
相关插件线程中目前还没有允许优化的解决方案: https://github.com/fynnmaarten/flutter_pytorch_mobile/issues/25
我的错误是
proguard-rules.pro
文件的位置错误。它必须位于 /android/app/
文件夹中。