【问题标题】:Android APK crashes at activity but it works when running it from Android StudioAndroid APK 在活动时崩溃,但在从 Android Studio 运行时可以正常工作
【发布时间】:2022-10-01 00:17:37
【问题描述】:

我正在 Flutter 上开发一个应用程序。 Flutter 代码中有这个按钮,当我按下它时,我会转到 Android 上的本机活动,因为它使用仅在那里可用的特定库(JCenter repo)。

当我将手机插入 PC 并通过 Android studio 运行它时,这工作得很好,但是当我创建 APK 时,将其安装在同一部手机上并按下按钮转到它崩溃的本机活动。当发生这种情况时,我已经运行了adb logcat,我看到的可能导致崩溃的错误是NoSuchMethodError: no static method "libraryName;methodName"。

我想 APK 不会从 JCenter 加载特定库,但我找不到会发生这种情况的单一原因,也找不到如何使其工作。或者也许我完全错了,这不是正在发生的事情,但我不知所措。

有谁知道为什么会发生这种情况,或者如何找到更多可以帮助我修复它的信息?

编辑:

该图书馆名为wifination。错误的方法是OnSave2ToGallery。我还发现了我的代码中崩溃的确切位置(从他们的示例代码中复制),当我在 Activity 的 onCreate() 方法中执行 wifination.appContext=getApplicationContext() 时。 appContext 是 wifination 类中的 public static Context appContext。

更多的错误:

09-29 18:19:32.853 30468 30468 D AndroidRuntime: Shutting down VM
09-29 18:19:32.853 30468 30468 E AndroidRuntime: FATAL EXCEPTION: main
09-29 18:19:32.853 30468 30468 E AndroidRuntime: Process: com.my.app, PID: 30468
09-29 18:19:32.853 30468 30468 E AndroidRuntime: java.lang.NoSuchMethodError: no static method "Lcom/joyhonest/wifination/wifination;.OnSave2ToGallery(Ljava/lang/String;I)V"
09-29 18:19:32.853 30468 30468 E AndroidRuntime:    at java.lang.Runtime.nativeLoad(Native Method)
09-29 18:19:32.853 30468 30468 E AndroidRuntime:    at java.lang.Runtime.nativeLoad(Runtime.java:1121)
09-29 18:19:32.853 30468 30468 E AndroidRuntime:    at java.lang.Runtime.loadLibrary0(Runtime.java:1075)
09-29 18:19:32.853 30468 30468 E AndroidRuntime:    at java.lang.Runtime.loadLibrary0(Runtime.java:998)
09-29 18:19:32.853 30468 30468 E AndroidRuntime:    at java.lang.System.loadLibrary(System.java:1656)
09-29 18:19:32.853 30468 30468 E AndroidRuntime:    at com.joyhonest.wifination.wifination.<clinit>(Unknown Source:15)
09-29 18:19:32.853 30468 30468 E AndroidRuntime:    at com.my.app.MyActivity.onCreate(Unknown Source:36)
09-29 18:19:32.853 30468 30468 E AndroidRuntime:    at android.app.Activity.performCreate(Activity.java:8057)
09-29 18:19:32.853 30468 30468 E AndroidRuntime:    at android.app.Activity.performCreate(Activity.java:8037)
09-29 18:19:32.853 30468 30468 E AndroidRuntime:    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1344)
09-29 18:19:32.853 30468 30468 E AndroidRuntime:    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3688)
09-29 18:19:32.853 30468 30468 E AndroidRuntime:    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3864)
09-29 18:19:32.853 30468 30468 E AndroidRuntime:    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103)
09-29 18:19:32.853 30468 30468 E AndroidRuntime:    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
09-29 18:19:32.853 30468 30468 E AndroidRuntime:    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
09-29 18:19:32.853 30468 30468 E AndroidRuntime:    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2253)
09-29 18:19:32.853 30468 30468 E AndroidRuntime:    at android.os.Handler.dispatchMessage(Handler.java:106)
09-29 18:19:32.853 30468 30468 E AndroidRuntime:    at android.os.Looper.loopOnce(Looper.java:201)
09-29 18:19:32.853 30468 30468 E AndroidRuntime:    at android.os.Looper.loop(Looper.java:288)
09-29 18:19:32.853 30468 30468 E AndroidRuntime:    at android.app.ActivityThread.main(ActivityThread.java:7870)
09-29 18:19:32.853 30468 30468 E AndroidRuntime:    at java.lang.reflect.Method.invoke(Native Method)
09-29 18:19:32.853 30468 30468 E AndroidRuntime:    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:550)
09-29 18:19:32.853 30468 30468 E AndroidRuntime:    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
09-29 18:19:32.856  1340  7072 W ActivityTaskManager:   Force finishing activity com.my.app/.MyActivity
09-29 18:19:32.856  1340 30620 I DropBoxManagerService: add tag=data_app_crash isTagEnabled=true flags=0x2
09-29 18:19:32.858  1340  7072 W ActivityTaskManager:   Force finishing activity com.my.app/.MainActivity
09-29 18:19:32.859  1340  1562 W BroadcastQueue: Background execution not allowed: receiving Intent { act=android.intent.action.DROPBOX_ENTRY_ADDED flg=0x10 (has extras) } to com.google.android.gms/.stats.service.DropBoxEntryAddedReceiver
09-29 18:19:32.860  1340  1562 W BroadcastQueue: Background execution not allowed: receiving Intent { act=android.intent.action.DROPBOX_ENTRY_ADDED flg=0x10 (has extras) } to com.google.android.gms/.chimera.GmsIntentOperationService$PersistentTrustedReceiver

【问题讨论】:

  • 确保符号没有被 R8 / ProGuard 混淆。
  • @Michael 我考虑过这个,但是在build.gradle 中的buildTypes &gt; release 里面只有signingConfig signingConfigs.debug。我在任何地方都看不到 R8/ProGuard 配置,而且我自己也没有做过。
  • 也许您应该发布完整的错误消息,包括真实的库和方法名称。还要检查在您的应用程序中发生错误的打印堆栈跟踪。如果代码是你写的,你也应该把它贴出来。
  • @Robert 图书馆名为wifination。错误的方法是OnSave2ToGallery。我还确切地发现了我的代码崩溃的确切位置(从他们的示例代码中复制),并且是在我执行 wifination.appContext=getApplicationContext() 时崩溃的。 appContext在课堂上是public static Context appContext。
  • 正如我所写,请更新您的问题 - cmets 对新代码不利。在问题中,您可以包含更大的代码部分。

标签: java android flutter apk jcenter


【解决方案1】:

是 R8 不包括库的 private static 方法。我将它们添加到 proguard-rules 文件中,它工作正常。

【讨论】:

    猜你喜欢
    • 2017-07-22
    • 1970-01-01
    • 2019-05-09
    • 2014-12-10
    • 2017-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-21
    相关资源
    最近更新 更多