Исключение из android.app.NativeActivity.onCreate () в приложении Android NDK (только для Android 6.0) - PullRequest
0 голосов
/ 13 июня 2019

Я недавно обновил Android Studio и все библиотеки SDK (июнь 2019 г.), и внезапно некоторые из моих пользователей начали испытывать этот сбой при запуске приложения.

Насколько я вижу, это происходит только наAndroid 6.0.

Приложение является родным приложением Android, использующим базовые классы NDK и app_glue, встроенный compiledSDK = 26.

Кто-то еще испытывал нечто подобное?

У меня нет телефона Android 6.0.Я пытался создать виртуальное устройство, но я не могу воспроизвести проблему на виртуальном устройстве.Он отлично работает для тысяч других игроков (Android 7, 8, 9)

Это стек вызовов исключений ================================

java.lang.RuntimeException: 
  at android.app.ActivityThread.performLaunchActivity 
(ActivityThread.java:3253)
  at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:3349)
  at android.app.ActivityThread.access$1100 (ActivityThread.java:221)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1794)
  at android.os.Handler.dispatchMessage (Handler.java:102)
  at android.os.Looper.loop (Looper.java:158)
  at android.app.ActivityThread.main (ActivityThread.java:7224)
  at java.lang.reflect.Method.invoke (Native Method)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1230)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1120)

Caused by: java.lang.IllegalArgumentException: 
  at android.app.NativeActivity.onCreate (NativeActivity.java:170)
  at android.app.Activity.performCreate (Activity.java:6876)
  at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1135)
  at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:3206)

ОБНОВЛЕНИЕ: Эта проблема возникает только в последней версии Gradle: 3.4.1 Когда я возвращаюсь к 3.2.1 , авария исчезнет.Gradle, похоже, делает что-то другое, что приводит к падению приложения в Android 6.0.

1 Ответ

1 голос
/ 13 июня 2019

Если вы проверите NativeActivity реализацию в AOSP в этот коммит от 5 лет назад (следующий от 3 лет и 7 месяцев назад, должен быть более 6.0), выобнаружите, что строка 170 выдает IllegalArgumentException:

mNativeHandle = loadNativeCode(path, funcname, Looper.myQueue(),
        getAbsolutePath(getFilesDir()), getAbsolutePath(getObbDir()),
        getAbsolutePath(getExternalFilesDir(null)),
        Build.VERSION.SDK_INT, getAssets(), nativeSavedState);
if (mNativeHandle == 0) {
    throw new IllegalArgumentException("Unable to load native library: " + path);
}

Это означает, что не удается найти вашу собственную библиотеку (или некоторую библиотеку, на которую ссылаются), или, возможно, не удается загрузить ее дляпо какой-то причине.

Я проверю с помощью Cmd-shift-A -> "Analyze APK ...", чтобы узнать, присутствуют ли все архитектуры для всех собственных библиотек.Одной из возможных проблем может быть то, что по какой-то причине некоторые из архитектур исключаются, и из-за этого работают на большинстве устройств, но в некоторых отказывают.

...