После отправки моего Android приложения, созданного с помощью LibGDX 1.9.10, я начал получать множество сбоев.
После некоторых исследований я обнаружил, что сбои происходят с устройств с Android 9 и выше (уровень API 28). Он отлично работает на более низких версиях Android.
Дальнейшее расследование показывает, что обнаруженные ошибки указывают на то, что ошибки вызваны тем, что Android модуль запуска LibGDX нарушает политики использования API, действовавшие с Android 9:
https://developer.android.com/distribute/best-practices/develop/restrictions-non-sdk-interfaces
"Начиная с Android 9 (уровень API 28), платформа ограничивает интерфейсы, не относящиеся к SDK, которые может использовать ваше приложение."
Ошибки, которые я вижу, выглядят следующим образом:
03-10 06:25:33.602: D/StrictMode(27425): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Ljava/nio/NIOAccess;->getBasePointer(Ljava/nio/Buffer;)J
03-10 06:25:33.602: D/StrictMode(27425): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
03-10 06:25:33.602: D/StrictMode(27425): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
03-10 06:25:33.602: D/StrictMode(27425): at com.badlogic.gdx.backends.android.AndroidGL20.init(Native Method)
03-10 06:25:33.602: D/StrictMode(27425): at com.badlogic.gdx.backends.android.AndroidGraphics.<init>(Unknown Source:86)
03-10 06:25:33.602: D/StrictMode(27425): at com.badlogic.gdx.backends.android.AndroidGraphics.<init>(Unknown Source:1)
03-10 06:25:33.602: D/StrictMode(27425): at com.badlogic.gdx.backends.android.AndroidApplication.init(Unknown Source:30)
03-10 06:25:33.602: D/StrictMode(27425): at com.badlogic.gdx.backends.android.AndroidApplication.initialize(Unknown Source:1)
03-10 06:25:33.602: D/StrictMode(27425): at my-libgdx-app.AndroidLauncher.onCreate(Unknown Source:97)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.Activity.performCreate(Activity.java:7327)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.Activity.performCreate(Activity.java:7318)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
03-10 06:25:33.602: D/StrictMode(27425): at androidx.test.runner.MonitoringInstrumentation.callActivityOnCreate(MonitoringInstrumentation.java:187)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3087)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3250)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1947)
03-10 06:25:33.602: D/StrictMode(27425): at android.os.Handler.dispatchMessage(Handler.java:106)
03-10 06:25:33.602: D/StrictMode(27425): at android.os.Looper.loop(Looper.java:214)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.ActivityThread.main(ActivityThread.java:7032)
03-10 06:25:33.602: D/StrictMode(27425): at java.lang.reflect.Method.invoke(Native Method)
03-10 06:25:33.602: D/StrictMode(27425): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
03-10 06:25:33.602: D/StrictMode(27425): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)
03-10 06:25:33.602: D/StrictMode(27425): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Ljava/nio/NIOAccess;->getBaseArray(Ljava/nio/Buffer;)Ljava/lang/Object;
03-10 06:25:33.602: D/StrictMode(27425): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
03-10 06:25:33.602: D/StrictMode(27425): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
03-10 06:25:33.602: D/StrictMode(27425): at com.badlogic.gdx.backends.android.AndroidGL20.init(Native Method)
03-10 06:25:33.602: D/StrictMode(27425): at com.badlogic.gdx.backends.android.AndroidGraphics.<init>(Unknown Source:86)
03-10 06:25:33.602: D/StrictMode(27425): at com.badlogic.gdx.backends.android.AndroidGraphics.<init>(Unknown Source:1)
03-10 06:25:33.602: D/StrictMode(27425): at com.badlogic.gdx.backends.android.AndroidApplication.init(Unknown Source:30)
03-10 06:25:33.602: D/StrictMode(27425): at com.badlogic.gdx.backends.android.AndroidApplication.initialize(Unknown Source:1)
03-10 06:25:33.602: D/StrictMode(27425): at my-libgdx-app.AndroidLauncher.onCreate(Unknown Source:97)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.Activity.performCreate(Activity.java:7327)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.Activity.performCreate(Activity.java:7318)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
03-10 06:25:33.602: D/StrictMode(27425): at androidx.test.runner.MonitoringInstrumentation.callActivityOnCreate(MonitoringInstrumentation.java:187)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3087)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3250)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1947)
03-10 06:25:33.602: D/StrictMode(27425): at android.os.Handler.dispatchMessage(Handler.java:106)
03-10 06:25:33.602: D/StrictMode(27425): at android.os.Looper.loop(Looper.java:214)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.ActivityThread.main(ActivityThread.java:7032)
03-10 06:25:33.602: D/StrictMode(27425): at java.lang.reflect.Method.invoke(Native Method)
03-10 06:25:33.602: D/StrictMode(27425): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
03-10 06:25:33.602: D/StrictMode(27425): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)
03-10 06:25:33.602: D/StrictMode(27425): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Ljava/nio/NIOAccess;->getBaseArrayOffset(Ljava/nio/Buffer;)I
03-10 06:25:33.602: D/StrictMode(27425): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
03-10 06:25:33.602: D/StrictMode(27425): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
03-10 06:25:33.602: D/StrictMode(27425): at com.badlogic.gdx.backends.android.AndroidGL20.init(Native Method)
03-10 06:25:33.602: D/StrictMode(27425): at com.badlogic.gdx.backends.android.AndroidGraphics.<init>(Unknown Source:86)
03-10 06:25:33.602: D/StrictMode(27425): at com.badlogic.gdx.backends.android.AndroidGraphics.<init>(Unknown Source:1)
03-10 06:25:33.602: D/StrictMode(27425): at com.badlogic.gdx.backends.android.AndroidApplication.init(Unknown Source:30)
03-10 06:25:33.602: D/StrictMode(27425): at com.badlogic.gdx.backends.android.AndroidApplication.initialize(Unknown Source:1)
03-10 06:25:33.602: D/StrictMode(27425): at my-libgdx-app.AndroidLauncher.onCreate(Unknown Source:97)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.Activity.performCreate(Activity.java:7327)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.Activity.performCreate(Activity.java:7318)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
03-10 06:25:33.602: D/StrictMode(27425): at androidx.test.runner.MonitoringInstrumentation.callActivityOnCreate(MonitoringInstrumentation.java:187)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3087)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3250)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1947)
03-10 06:25:33.602: D/StrictMode(27425): at android.os.Handler.dispatchMessage(Handler.java:106)
03-10 06:25:33.602: D/StrictMode(27425): at android.os.Looper.loop(Looper.java:214)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.ActivityThread.main(ActivityThread.java:7032)
03-10 06:25:33.602: D/StrictMode(27425): at java.lang.reflect.Method.invoke(Native Method)
03-10 06:25:33.602: D/StrictMode(27425): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
03-10 06:25:33.602: D/StrictMode(27425): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)
03-10 06:25:33.602: D/StrictMode(27425): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Ljava/nio/Buffer;->position:I
03-10 06:25:33.602: D/StrictMode(27425): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
03-10 06:25:33.602: D/StrictMode(27425): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
03-10 06:25:33.602: D/StrictMode(27425): at com.badlogic.gdx.backends.android.AndroidGL20.init(Native Method)
03-10 06:25:33.602: D/StrictMode(27425): at com.badlogic.gdx.backends.android.AndroidGraphics.<init>(Unknown Source:86)
03-10 06:25:33.602: D/StrictMode(27425): at com.badlogic.gdx.backends.android.AndroidGraphics.<init>(Unknown Source:1)
03-10 06:25:33.602: D/StrictMode(27425): at com.badlogic.gdx.backends.android.AndroidApplication.init(Unknown Source:30)
03-10 06:25:33.602: D/StrictMode(27425): at com.badlogic.gdx.backends.android.AndroidApplication.initialize(Unknown Source:1)
03-10 06:25:33.602: D/StrictMode(27425): at my-libgdx-app.AndroidLauncher.onCreate(Unknown Source:97)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.Activity.performCreate(Activity.java:7327)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.Activity.performCreate(Activity.java:7318)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
03-10 06:25:33.602: D/StrictMode(27425): at androidx.test.runner.MonitoringInstrumentation.callActivityOnCreate(MonitoringInstrumentation.java:187)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3087)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3250)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1947)
03-10 06:25:33.602: D/StrictMode(27425): at android.os.Handler.dispatchMessage(Handler.java:106)
03-10 06:25:33.602: D/StrictMode(27425): at android.os.Looper.loop(Looper.java:214)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.ActivityThread.main(ActivityThread.java:7032)
03-10 06:25:33.602: D/StrictMode(27425): at java.lang.reflect.Method.invoke(Native Method)
03-10 06:25:33.602: D/StrictMode(27425): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
03-10 06:25:33.602: D/StrictMode(27425): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)
03-10 06:25:33.602: D/StrictMode(27425): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Ljava/nio/Buffer;->limit:I
03-10 06:25:33.602: D/StrictMode(27425): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
03-10 06:25:33.602: D/StrictMode(27425): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
03-10 06:25:33.602: D/StrictMode(27425): at com.badlogic.gdx.backends.android.AndroidGL20.init(Native Method)
03-10 06:25:33.602: D/StrictMode(27425): at com.badlogic.gdx.backends.android.AndroidGraphics.<init>(Unknown Source:86)
03-10 06:25:33.602: D/StrictMode(27425): at com.badlogic.gdx.backends.android.AndroidGraphics.<init>(Unknown Source:1)
03-10 06:25:33.602: D/StrictMode(27425): at com.badlogic.gdx.backends.android.AndroidApplication.init(Unknown Source:30)
03-10 06:25:33.602: D/StrictMode(27425): at com.badlogic.gdx.backends.android.AndroidApplication.initialize(Unknown Source:1)
03-10 06:25:33.602: D/StrictMode(27425): at my-libgdx-app.AndroidLauncher.onCreate(Unknown Source:97)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.Activity.performCreate(Activity.java:7327)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.Activity.performCreate(Activity.java:7318)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
03-10 06:25:33.602: D/StrictMode(27425): at androidx.test.runner.MonitoringInstrumentation.callActivityOnCreate(MonitoringInstrumentation.java:187)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3087)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3250)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1947)
03-10 06:25:33.602: D/StrictMode(27425): at android.os.Handler.dispatchMessage(Handler.java:106)
03-10 06:25:33.602: D/StrictMode(27425): at android.os.Looper.loop(Looper.java:214)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.ActivityThread.main(ActivityThread.java:7032)
03-10 06:25:33.602: D/StrictMode(27425): at java.lang.reflect.Method.invoke(Native Method)
03-10 06:25:33.602: D/StrictMode(27425): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
03-10 06:25:33.602: D/StrictMode(27425): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)
03-10 06:25:33.602: D/StrictMode(27425): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Ljava/nio/Buffer;->_elementSizeShift:I
03-10 06:25:33.602: D/StrictMode(27425): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
03-10 06:25:33.602: D/StrictMode(27425): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
03-10 06:25:33.602: D/StrictMode(27425): at com.badlogic.gdx.backends.android.AndroidGL20.init(Native Method)
03-10 06:25:33.602: D/StrictMode(27425): at com.badlogic.gdx.backends.android.AndroidGraphics.<init>(Unknown Source:86)
03-10 06:25:33.602: D/StrictMode(27425): at com.badlogic.gdx.backends.android.AndroidGraphics.<init>(Unknown Source:1)
03-10 06:25:33.602: D/StrictMode(27425): at com.badlogic.gdx.backends.android.AndroidApplication.init(Unknown Source:30)
03-10 06:25:33.602: D/StrictMode(27425): at com.badlogic.gdx.backends.android.AndroidApplication.initialize(Unknown Source:1)
03-10 06:25:33.602: D/StrictMode(27425): at my-libgdx-app.AndroidLauncher.onCreate(Unknown Source:97)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.Activity.performCreate(Activity.java:7327)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.Activity.performCreate(Activity.java:7318)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
03-10 06:25:33.602: D/StrictMode(27425): at androidx.test.runner.MonitoringInstrumentation.callActivityOnCreate(MonitoringInstrumentation.java:187)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3087)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3250)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1947)
03-10 06:25:33.602: D/StrictMode(27425): at android.os.Handler.dispatchMessage(Handler.java:106)
03-10 06:25:33.602: D/StrictMode(27425): at android.os.Looper.loop(Looper.java:214)
03-10 06:25:33.602: D/StrictMode(27425): at android.app.ActivityThread.main(ActivityThread.java:7032)
03-10 06:25:33.602: D/StrictMode(27425): at java.lang.reflect.Method.invoke(Native Method)
03-10 06:25:33.602: D/StrictMode(27425): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
03-10 06:25:33.602: D/StrictMode(27425): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)
Приведенный выше журнал взят из Firebase Test Lab, но я уверен, что он представляет ту же ошибку, которую я получаю от реальных устройств в сети .
Что я могу сделать? Моя статистика sh набирает обороты, и рейтинги обязательно последуют: (