React Native打包安卓不符合谷歌play关于提供64位版本应用的规定
最近公司的RN项目需要发布到谷歌市场,但是谷歌市场校验提示"不符合谷歌play关于提供64位版本应用的规定",记录下解决过程。
1,解决方案:在ndk后面加入"arm64-v8a", “x86_64”(如果可以的话,就不必往下看了)
路径是项目的app–>build.gradle–>defaultConfig–>ndk
2,在我这里,上一步实施后能通过谷歌市场的校验,但是运行app会报错:libgnustl_shared.so is 32-bit instead of 64-bit
原因是libgnustl_shared.so是32位而不是64位,我们需要取消掉所有的64位文件,查看打包成的apk文件
发现在打包好的apk文件的lib中只有这两个62和32位的libimagepipeline.so文件重复,于是我在试着在在 build.gradle 文件里添加以下代码:
android {
...
defaultConfig {
...
ndk {
abiFilters "armeabi-v7a", "x86", "arm64-v8a", "x86_64"
}
packagingOptions {
exclude "lib/arm64-v8a/libimagepipeline.so"
}
}
}
去除64位下面的libimagepipeline.so
这样做后发现了新问题,由于arm64-v8a里面只有一个文件:libimagepipeline.so,所以在exclude掉libimagepipeline.so后,打包好的apk的lib里面的arm64-v8a文件夹也没有了,还是不能通过谷歌市场的校验
3,最终解决方案:通过apktool解码打包好的apk文件,然后删除libimagepipeline.so。再进行编码,签名,格式化
3.1下载apktool(很简单,能搜到的资源很多)
3.2解码apk文件
apktool d YourName.apk
3.2删除解码好的文件夹下面的libimagepipeline.so
删除后在arm64-v8a下面最好新建几个空的文件夹,要不然谷歌市场还是会监测到
3.2编码
apktool b YourName.apk
3.2签名(使用jarsigner)
jarsigner -verbose -keystore ~/apktools/YourKey.keystore -signedjar ~/apktools/app-release/dist/signed.apk ~/apktools/app-release/dist/app-release.apk YourAppName
3.3使用zipalign格式化apk
/Users/YourName/Library/Android/sdk/build-tools/28.0.0/zipalign -v 4 ~/apktools/app-release/dist/signed.apk ~/apktools/app-release/dist/signed1.apk
大功告成!
这些只是我遇到的问题,不同的人可能结果不一样,或许不需要我这么复杂的处理。