自过去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'
}
答案 0 :(得分:7)
根据Android native crash initiating from /system/framework/arm/boot.oat,当使用Zopfli对apk进行压码时,某些三星设备会产生此错误。
根据您使用的build.gradle
buildToolsVersion "23.0.0"
所以我会说你的apk是使用Zopfli压缩对齐的,这是你找到的问题的根源(Zopfli是在{{{ 1}})。
请注意,当您使用21.0.0
生成apk时,您的apk会自动压缩对齐。来自the documentation:
zipalign是一个存档对齐工具,可为Android应用程序(.apk)文件提供重要优化
要解决此问题,您可以避免将Build -> Generate Signed APK
自动压缩添加到zipAlignEnabled false
的{{1}}部分:
release
然后,你需要再次生成你的apk(你可以检查你的apk不是zipaligned运行build.gradle
。它将输出release {
//...
zipAlignEnabled false
}
)然后使用the zipalign instructions手动压缩apk ,避免使用zipalign -c -v 4 yourapk.apk
选项。
Verification FAILED
其他选项是将-z
更改为,例如zipalign -f -v 4 yourapk.apk yourzipalignedapk.apk
(此版本中的zipalign工具不包括Zopfli)但不建议这样做(来自the documentation):
您应该始终使用Android SDK Manager下载最新版本来更新Build Tools组件。默认情况下,Android SDK使用最新下载的Build Tools版本。如果您的项目依赖于旧版本的构建工具,则SDK Manager允许您下载和维护用于这些项目的工具的单独版本。
答案 1 :(得分:0)
我找到了正确的解决方案here。 使用
-keep class !android.support.v7.internal.view.menu.**,android.support.v7.** {*;}
而不是
-keep class android.support.v7.** {*;}