Мой экран-заставка работает в эмуляторе, но на физическом устройстве происходит сбой. В чем может быть дело?
styles.xml
<resources>
<!-- Base application theme. -->
<style name = "AppTheme" parent = "Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
</style>
<style name = "SplashTheme" parent = "AppTheme">
<item name = "android:windowBackground">@drawable/splash_screen</item>
</style>
</resources>
splash.xml
<?xml version = "1.0" encoding = "utf-8"?>
<layer-list xmlns:android = "http://schemas.android.com/apk/res/android">
<item
android:drawable = "@drawable/splash_screen"/>
<item>
<bitmap
android:gravity = "center"
android:src = "@mipmap/ic_launcher"/>
</item>
</layer-list>
Это все, что я добавил для заставки, которая работает в эмуляторе. Как отладить сбой на физическом устройстве (Samsung S8).
AndroidManifest.xml
<manifest xmlns:android = "http://schemas.android.com/apk/res/android"
package = "com.koolbusiness">
<uses-permission android:name = "android.permission.INTERNET" />
<uses-permission android:name = "android.permission.SYSTEM_ALERT_WINDOW"/>
<application
android:name = ".MainApplication"
android:label = "@string/app_name"
android:icon = "@mipmap/ic_launcher"
android:allowBackup = "false"
android:theme = "@style/AppTheme">
<activity
android:name = ".MainActivity"
android:label = "@string/app_name"
android:theme = "@style/SplashTheme"
android:configChanges = "keyboard|keyboardHidden|orientation|screenSize">
<intent-filter>
<action android:name = "android.intent.action.MAIN" />
<category android:name = "android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name = "com.facebook.react.devsupport.DevSettingsActivity" />
</application>
</manifest>
Мне удалось создать эту трассировку стека (не теряя рассудка в поисках драйвера USB) из консоли приложения Google.
37 minutes ago on app version 7
Samsung Galaxy S8 (dreamlte), 4096MB RAM, Android 8.0
Report 1
java.lang.RuntimeException:
at android.view.DisplayListCanvas.throwIfCannotDraw (DisplayListCanvas.java:229)
at android.view.RecordingCanvas.drawBitmap (RecordingCanvas.java:97)
at android.graphics.drawable.BitmapDrawable.draw (BitmapDrawable.java:529)
at android.view.View.getDrawableRenderNode (View.java:20627)
at android.view.View.drawBackground (View.java:20563)
at android.view.View.draw (View.java:20343)
at com.android.internal.policy.DecorView.draw (DecorView.java:979)
at android.view.View.updateDisplayListIfDirty (View.java:19297)
at android.view.ThreadedRenderer.updateViewTreeDisplayList (ThreadedRenderer.java:686)
at android.view.ThreadedRenderer.updateRootDisplayList (ThreadedRenderer.java:692)
at android.view.ThreadedRenderer.draw (ThreadedRenderer.java:800)
at android.view.ViewRootImpl.draw (ViewRootImpl.java:3447)
at android.view.ViewRootImpl.performDraw (ViewRootImpl.java:3234)
at android.view.ViewRootImpl.performTraversals (ViewRootImpl.java:2769)
at android.view.ViewRootImpl.doTraversal (ViewRootImpl.java:1738)
at android.view.ViewRootImpl$TraversalRunnable.run (ViewRootImpl.java:7745)
at android.view.Choreographer$CallbackRecord.run (Choreographer.java:911)
at android.view.Choreographer.doCallbacks (Choreographer.java:723)
at android.view.Choreographer.doFrame (Choreographer.java:658)
at android.view.Choreographer$FrameDisplayEventReceiver.run (Choreographer.java:897)
at android.os.Handler.handleCallback (Handler.java:789)
at android.os.Handler.dispatchMessage (Handler.java:98)
at android.os.Looper.loop (Looper.java:164)
at android.app.ActivityThread.main (ActivityThread.java:6938)
at java.lang.reflect.Method.invoke (Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run (Zygote.java:327)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1374)
@Shark У меня нет информации, где это.
Если у вас нет трассировки стека (аварийного журнала), тогда это может быть что угодно и, возможно, совершенно не связанное с тем, что вы вставили.
@Shark Если я удалю, все заработает. Если я его использую, он вылетает. Очевидно, что этот код вызывает сбой.
Прошлый код ошибки Logcat
@MohammadAli Но у меня нет Logcat с моим физическим устройством. С эмулятором код работает. Сбой только с физическим устройством.
В вашем java файле выберите этот код new Handler().postDelayed(new Runnable() { public void run() { // This method will be executed once the timer is over // Start your app main activity Intent i = new Intent(splashScreen.this, MainActivity.class); startActivity(i); // close this activity finish(); } }, SPLASH_TIME_OUT); и отладьте код
@NiklasRosencrantz пробовали ли вы подключить физическое устройство к компьютеру через USB? Если на вашем физическом устройстве включены параметры разработчика, вы увидите эти журналы в разделе «Logcat» Android Studio.
@muminers Я собираюсь попробовать это сейчас, но это очень большая работа для чего-то, что может быть очень простой проблемой. Я просто пытаюсь добавить заставку.
@NiklasRosencrantz Уверяю вас - это очень просто. Просто включите параметры разработчика (USB-отладка) и подключитесь к ПК. Без logcat мы просто не сможем помочь.
@muminers Теперь у меня две проблемы. (1) Заставка. (2) Среда отладки.
@NiklasRosencrantz: извините, но если вам сложно включить отладку на вашем устройстве, то я просто желаю вам удачи. Более того, даже не пытаться облегчить отладку - это просто неуважительно по отношению ко всем людям, пытающимся вам помочь. Я закончил ... kingoapp.com/root-tutorials/…
@muminers Я могу включить отладку по USB. Это не заставка. Я могу включить отладку по USB, но это ничего не меняет. Я даже не могу запустить Logcat с физического устройства. Не существует «usb_driver», и никто не понимает, означает ли «Android SDK» загрузить что-то еще, кроме Android Studio.
Я использовал тот же метод в своем приложении для создания заставки, и это сработало для меня, попробуйте эти изменения и дайте мне знать.
styles.xml - удалите часть parent = "AppTheme", чтобы она выглядела так
<style name = "SplashTheme">
<item name = "android:windowBackground">@drawable/splash_screen</item>
</style>
splash.xml
<?xml version = "1.0" encoding = "utf-8"?>
<layer-list xmlns:android = "http://schemas.android.com/apk/res/android">
// use a color here instead like the line below
<item android:drawable = "@color/white"/>
<item>
<bitmap
android:gravity = "center"
android:src = "@mipmap/ic_launcher"/>
</item>
</layer-list>
manifest - используйте "@style/SplashTheme" в качестве темы приложения и удалите строку android:theme = "@style/SplashTheme" из основного действия.
<manifest xmlns:android = "http://schemas.android.com/apk/res/android"
package = "com.koolbusiness">
<uses-permission android:name = "android.permission.INTERNET" />
<uses-permission android:name = "android.permission.SYSTEM_ALERT_WINDOW"/>
<application
android:name = ".MainApplication"
android:label = "@string/app_name"
android:icon = "@mipmap/ic_launcher"
android:allowBackup = "false"
android:theme = "@style/SplashTheme">
<activity
android:name = ".MainActivity"
android:label = "@string/app_name"
android:configChanges = "keyboard|keyboardHidden|orientation|screenSize">
<intent-filter>
<action android:name = "android.intent.action.MAIN" />
<category android:name = "android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name = "com.facebook.react.devsupport.DevSettingsActivity"
/>
</application>
</manifest>
Ошибка: не найден ресурс, соответствующий заданному имени (в 'drawable' со значением '@ drawable / white').
на самом деле это белый цвет, и вам нужно будет создать ресурс цвета под названием white или просто использовать существующий, который находится в файле colors.xml для целей тестирования.
Решено этим stackoverflow.com/questions/39111248/…
Вставка аварийного журнала / stacktrace не показалась вам очевидным шагом1?