【问题标题】:Native crashes received in Samsung devices only with Lollipop 5.0 & 5.1 versions三星设备仅在 Lollipop 5.0 和 5.1 版本中收到本机崩溃
【发布时间】:2016-04-08 05:47:45
【问题描述】:

自过去 2 个月以来,我们已经开始在开发者控制台中收到仅适用于部分三星设备的原生崩溃。

这是崩溃跟踪

*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
Build fingerprint: 'samsung/ha3gjv/ha3g:5.0/LRX21V/N9000QXXUEBOG3:user/release-keys'
Revision: '11'
ABI: 'arm'
pid: 10422, tid: 10478, name: AsyncTask #2  >>> com.sample.app <<<
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x1c
    r0 131413a0  r1 131413a0  r2 b1687070  r3 00262827
    r4 00000349  r5 131413a0  r6 00000000  r7 00000002
    r8 131412c0  r9 af071800  sl 87783218  fp 13141360
    ip 000031d0  sp 9530e8c0  lr 7446c91f  pc a0a83596  cpsr 000f0030

backtrace:
    #00 pc 001bc596  /data/dalvik-cache/arm/data@app@com.sample.app-2@base.apk@classes.dex
    #01 pc 0008091d  /system/framework/arm/boot.oat

这是迄今为止收到崩溃的设备列表 -

Galaxy S6 (zeroflte)
Galaxy S6 Edge+ (zenltevzw)
Galaxy A5(2016) (a5xelte)
Galaxy S5 Neo (s5neolte)    
Galaxy S6 Edge (zerolte)    
Galaxy S6 (zerofltetmo)
Galaxy Note3 (ha3g)
Galaxy J7 (j7elte)
Galaxy Note4 (trelte)
Galaxy S5 (k3g)
Galaxy Alpha (slte)

关于它为什么会发生的任何想法?

这里是 build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.0"

    defaultConfig {
        applicationId "com.test" 
        minSdkVersion 14
        targetSdkVersion 22
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
}

dependencies {
    compile files('libs/okhttp-2.4.0.jar')
    compile files('libs/okhttp-urlconnection-2.4.0.jar')
    compile files('libs/okio-1.4.0.jar')
    compile files('libs/mediaplayersdk.jar')


    compile 'com.google.android.gms:play-services-analytics:8.4.0'
    compile 'com.google.android.gms:play-services-ads:8.4.0'
    compile 'com.android.support:appcompat-v7:23.1.0'
}

【问题讨论】:

  • 谢谢 Sunil,但你提到的似乎不是原生崩溃
  • 你用过 zipalign 吗?
  • 我通过Android Studio选项生成APK,Build -> Generate Signed APK
  • 你能发布你的build.gradle吗?

标签: android crash android-5.0-lollipop native samsung-mobile


【解决方案1】:

根据Android native crash initiating from /system/framework/arm/boot.oatAndroid native crash initiating from /system/framework/arm/boot.oat,当使用 Zopfli 对 apk 进行压缩对齐时,在某些三星设备上会产生此错误。

根据您的build.gradle,您使用的是buildToolsVersion "23.0.0",所以我想说您的apk 是使用Zopfli 压缩对齐的,这是您发现问题的根源(Zopfli 是在21.0.0 版本中添加的)。

请注意,当您使用 Build -&gt; Generate Signed APK 生成您的 apk 时,您的 apk 会自动压缩对齐。来自the documentation

zipalign 是一个存档对齐工具,可为 Android 应用程序 (.apk) 文件提供重要优化

要解决这个问题,您可以避免自动将zipAlignEnabled false 添加到build.gradlerelease 部分:

release {
    //...
    zipAlignEnabled false
}

然后,您需要再次生成您的 apk(您可以检查您的 apk 是否未压缩对齐运行 zipalign -c -v 4 yourapk.apk。它将输出 Verification FAILED)然后使用 the zipalign instructions 手动压缩 apk,避免 -z选项。

zipalign -f -v 4 yourapk.apk yourzipalignedapk.apk

其他选项是将buildToolsVersion 更改为,例如20.0.0(此版本中的zipalign 工具不包括Zopfli)但不建议这样做(来自the documentation):

您应始终通过使用 Android SDK 管理器下载最新版本来更新您的构建工具组件。默认情况下,Android SDK 使用最新下载的构建工具版本。如果您的项目依赖于旧版本的构建工具,SDK 管理器允许您下载和维护单独版本的工具以用于这些项目。

【讨论】:

  • 感谢安东尼奥的详细回答。将尝试此操作并确认这是否可以解决问题。但是,我的一个疑问是我也有多个 Android 5.0 和 Android 5.1 设备,但无法重现该问题。那么问题可能是随机发生而不是在所有设备上发生的吗?
  • 是的,我认为该问题可能会随机发生或仅在某些设备上发生。这类问题非常烦人,因为它们真的很难追踪。如果你有任何进展,请告诉我
  • @user669231 关于这个话题有什么消息吗?有帮助吗?如果您能提供一些见解并在有帮助的情况下接受此答案,那就太好了。
  • @antonio 想知道为什么手动 zipalign 可以解决这个问题?有什么区别?
  • @antonio 和 zipalign "-z" 是干什么用的?找不到任何关于它的信息。编辑:-z:使用 Zopfli 重新压缩
【解决方案2】:

我找到了合适的解决方案here。 通过使用

 -keep class !android.support.v7.internal.view.menu.**,android.support.v7.**      {*;}

而不是

 -keep class android.support.v7.** {*;}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    • 2017-10-13
    • 1970-01-01
    • 2015-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多