最近公司的RN项目需要发布到谷歌市场,但是谷歌市场校验提示"不符合谷歌play关于提供64位版本应用的规定",记录下解决过程。
路径是项目的app–>build.gradle–>defaultConfig–>ndk
原因是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文件夹也没有了,还是不能通过谷歌市场的校验
apktool d YourName.apk
删除后在arm64-v8a下面最好新建几个空的文件夹,要不然谷歌市场还是会监测到
apktool b YourName.apk
jarsigner -verbose -keystore ~/apktools/YourKey.keystore -signedjar ~/apktools/app-release/dist/signed.apk ~/apktools/app-release/dist/app-release.apk YourAppName
/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
大功告成!
这些只是我遇到的问题,不同的人可能结果不一样,或许不需要我这么复杂的处理。