在一个Android12的机器上,出现了无法安装应用的情况,报了setForceSafeLabels()方法找不到。
崩溃日志:
06-15 15:52:15.228 D/AndroidRuntime( 9746): Shutting down VM
06-15 15:52:15.233 E/AndroidRuntime( 9746): FATAL EXCEPTION: main
06-15 15:52:15.233 E/AndroidRuntime( 9746): Process: com.android.packageinstaller, PID: 9746
06-15 15:52:15.233 E/AndroidRuntime( 9746): java.lang.NoSuchMethodError: No static method setForceSafeLabels(Z)V in class Landroid/content/pm/PackageItemInfo; or its super classes (declaration of 'android.content.pm.PackageItemInfo' appears in /system/framework/framework.jar)
06-15 15:52:15.233 E/AndroidRuntime( 9746): at com.android.packageinstaller.PackageInstallerApplication.onCreate(PackageInstallerApplication.java:32)
06-15 15:52:15.233 E/AndroidRuntime( 9746): at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1189)
06-15 15:52:15.233 E/AndroidRuntime( 9746): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6460)
06-15 15:52:15.233 E/AndroidRuntime( 9746): at android.app.ActivityThread.access$1300(ActivityThread.java:219)
06-15 15:52:15.233 E/AndroidRuntime( 9746): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1859)
06-15 15:52:15.233 E/AndroidRuntime( 9746): at android.os.Handler.dispatchMessage(Handler.java:107)
06-15 15:52:15.233 E/AndroidRuntime( 9746): at android.os.Looper.loop(Looper.java:214)
06-15 15:52:15.233 E/AndroidRuntime( 9746): at android.app.ActivityThread.main(ActivityThread.java:7356)
06-15 15:52:15.233 E/AndroidRuntime( 9746): at java.lang.reflect.Method.invoke(Native Method)
06-15 15:52:15.233 E/AndroidRuntime( 9746): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
06-15 15:52:15.233 E/AndroidRuntime( 9746): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1067)
查了下资料,才发现setForceSafeLabels 方法是在 Android 12 (API 级别 31) 中引入的。
解决方法:在应用程序项目工程中的 minSdkVersion 设置为 Android 12 或更高版本,才能使用这个方法。