React Native打包安卓不符合谷歌play关于提供64位版本应用的规定

℡╲_俬逩灬. 提交于 2019-11-29 19:15:31

最近公司的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

大功告成!

这些只是我遇到的问题,不同的人可能结果不一样,或许不需要我这么复杂的处理。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!