R8/ProGuard 规则在 java.lang.ClassNotFoundException 之后保留 org.pytorch.PyTorchAndroid:未找到类

问题描述 投票:0回答:1

使用

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

android flutter proguard android-r8
1个回答
0
投票

我的错误是

proguard-rules.pro
文件的位置错误。它必须位于
/android/app/
文件夹中。

© www.soinside.com 2019 - 2024. All rights reserved.