【问题标题】:My app has successfully been installed on Android, but crashes as soon as it loads我的应用程序已成功安装在 Android 上,但加载后立即崩溃
【发布时间】:2017-04-01 20:14:55
【问题描述】:

我的 apk 已成功推送到我的 Android 设备上,即华为 Y6。我的 ant 构建成功,我的 ndk-build 也是如此。当我按下我的应用程序图标时,手机会加载黑屏。这会在崩溃前持续几秒钟。这是我的 AndroidManifest.xml 的副本

  <?xml version="1.0" encoding="utf-8"?>

  <manifest xmlns:android="http://schemas.android.com/apk/res/android"
            package="com.tutorial.game"
            android:versionCode="1"
            android:versionName="1.0"
            android:installLocation="auto">

  <!-- Android 2.3.3 -->
  <uses-sdk android:minSdkVersion="19" android:targetSdkVersion="25" />

  <!-- OpenGL ES 3.0 -->
  <uses-feature android:glEsVersion="0x00030000" />

  <!-- Allow writing to external storage -->
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />


<application android:label="@string/app_name"
             android:icon="@drawable/ic_launcher"
             android:allowBackup="true"
             android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
             android:debuggable="true"
             android:hardwareAccelerated="true" >
    <activity android:name="HelloSDL2Activity"
              android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
                    android:configChanges="orientation|keyboard|keyboardHidden|screenLayout"
              android:screenOrientation="sensorLandscape"
              android:launchMode="singleTask" android:hardwareAccelerated="true" android:enabled="true">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

     </activity>
  </application>

</manifest> 

我从命令行运行它来创建一个日志文件:

adb logcat -V long *:W *:E *:F > log.txt

这里是记录的 sn-p:

  [ 03-31 20:32:36.129   820:28542 W/ActivityManager ]

  Force finishing activity 1 com.tutorial.game/.HelloSDL2Activity



  [ 03-31 20:32:36.239   820:28542 W/ActivityManager ]

  Exception thrown during pause

  android.os.TransactionTooLargeException

at android.os.BinderProxy.transactNative(Native Method)

at android.os.BinderProxy.transact(Binder.java:496)

at android.app.ApplicationThreadProxy.schedulePauseActivity(ApplicationThreadNative.java:715)

at com.android.server.am.ActivityStack.startPausingLocked(ActivityStack.java:1012)

at com.android.server.am.ActivityStack.finishActivityLocked(ActivityStack.java:3393)

at com.android.server.am.ActivityStack.finishTopRunningActivityLocked(ActivityStack.java:3223)

at com.android.server.am.ActivityStackSupervisor.finishTopRunningActivityLocked(ActivityStackSupervisor.java:3026)

at com.android.server.am.ActivityManagerService.handleAppCrashLocked(ActivityManagerService.java:12440)

at com.android.server.am.ActivityManagerService.makeAppCrashingLocked(ActivityManagerService.java:12337)

at com.android.server.am.ActivityManagerService.crashApplication(ActivityManagerService.java:13066)

at com.android.server.am.ActivityManagerService.handleApplicationCrashInner(ActivityManagerService.java:12547)

at com.android.server.am.NativeCrashListener$NativeCrashReporter.run(NativeCrashListener.java:86)

任何人都可以理解这些。我一直在 Google 上搜索如何理解日志文件消息,但收效甚微。

这是来自日志文件的另一个 sn-p:

 [ 03-31 20:37:05.049   820:29426 W/ActivityManager ]

 Exception thrown during pause

android.os.DeadObjectException

at android.os.BinderProxy.transactNative(Native Method)

at android.os.BinderProxy.transact(Binder.java:496)

at android.app.ApplicationThreadProxy.schedulePauseActivity(ApplicationThreadNative.java:715)

at com.android.server.am.ActivityStack.startPausingLocked(ActivityStack.java:1012)

at com.android.server.am.ActivityStack.finishActivityLocked(ActivityStack.java:3393)

at com.android.server.am.ActivityStack.finishTopRunningActivityLocked(ActivityStack.java:3223)

at com.android.server.am.ActivityStackSupervisor.finishTopRunningActivityLocked(ActivityStackSupervisor.java:3026)

at com.android.server.am.ActivityManagerService.handleAppCrashLocked(ActivityManagerService.java:12440)

at com.android.server.am.ActivityManagerService.makeAppCrashingLocked(ActivityManagerService.java:12337)

at com.android.server.am.ActivityManagerService.crashApplication(ActivityManagerService.java:13066)

at com.android.server.am.ActivityManagerService.handleApplicationCrashInner(ActivityManagerService.java:12547)

at com.android.server.am.NativeCrashListener$NativeCrashReporter.run(NativeCrashListener.java:86)

【问题讨论】:

  • 您是否在更容易调试的 PC 上测试了逻辑?
  • 事务太大意味着你在 Intent 的 Bundle 中塞入了太多数据。但这看起来更像是次要崩溃日志,而不是主要原因,你确定没有更多吗?
  • 这里是包含日志文件其余部分的链接filehosting.org/file/details/653849/game18.txt
  • 我已经在 PC 上调试了应用程序,一切正常。唯一真正的问题是使用 Visual Studio 的加载时间非常慢。我正在尝试对此进行优化。但即使我修改程序以便只加载一个纹理,当我将它移植到 Android 时它仍然会崩溃。
  • 我的纹理文件是 5.25mb,在我的程序开始时所有的纹理都被加载和初始化。这可能是问题吗?

标签: android c++ ant opengl-es android-ndk


【解决方案1】:

您收到 TransactionTooLargeException,这可能是因为您尝试加载 5.25mb 的数据。

通过意图/捆绑共享数据使用绑定器,其实例的最大限制为 1mb。

您的屏幕变黑是因为您可能在创建应用程序时尝试执行繁重的任务。

【讨论】:

  • 好的。有没有其他方法可以共享这些数据,或者如果我使用lazy_initialization 来减少加载程序所需的时间和工作会更好?
  • 推送到我的 android 设备上的我的 apk 大小为 12.87 mb。会不会是 binder 无法处理的数据?
【解决方案2】:

所以我设法解决的第一个错误与图标有关。 icon.png 位于 jni 文件夹中的可绘制文件中。我在这个文件中插入了一个尺寸为 500 x 726 的图标。现在,即使您将图像显示为 Android 设备上的图标,这实际上也会导致应用程序崩溃 - 因此会显示黑页。实际上有五种尺寸的启动器图标, 48 × 48 (mdpi) 72 × 72 (hdpi) 96 × 96 (xhdpi) 144 × 144 (xxhdpi) 192 × 192 (xxxhdpi) 512 × 512(Google Play 商店) 请注意,宽度和高度必须是相同的大小。 Anway 在可绘制文件中放置了具有正确尺寸的图标会导致我的应用程序在几秒钟后不再崩溃。然而,它并没有解决整个问题!更多调试工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-09
    • 1970-01-01
    • 2020-08-18
    • 2019-11-29
    • 1970-01-01
    • 2021-09-28
    • 1970-01-01
    相关资源
    最近更新 更多