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

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

    • 1,解决方案:在ndk后面加入"arm64-v8a", "x86_64"(如果可以的话,就不必往下看了)
    • 2,在我这里,上一步实施后能通过谷歌市场的校验,但是运行app会报错:libgnustl_shared.so is 32-bit instead of 64-bit
    • 3,最终解决方案:通过apktool解码打包好的apk文件,然后删除libimagepipeline.so。再进行编码,签名,格式化
            • 3.1下载apktool(很简单,能搜到的资源很多)
            • 3.2解码apk文件
            • 3.2删除解码好的文件夹下面的libimagepipeline.so
            • 3.2编码
            • 3.2签名(使用jarsigner)
            • 3.3使用zipalign格式化apk

最近公司的RN项目需要发布到谷歌市场,但是谷歌市场校验提示"不符合谷歌play关于提供64位版本应用的规定",记录下解决过程。

1,解决方案:在ndk后面加入"arm64-v8a", “x86_64”(如果可以的话,就不必往下看了)

路径是项目的app–>build.gradle–>defaultConfig–>ndk
React Native打包安卓不符合谷歌play关于提供64位版本应用的规定_第1张图片

2,在我这里,上一步实施后能通过谷歌市场的校验,但是运行app会报错:libgnustl_shared.so is 32-bit instead of 64-bit

原因是libgnustl_shared.so是32位而不是64位,我们需要取消掉所有的64位文件,查看打包成的apk文件
React Native打包安卓不符合谷歌play关于提供64位版本应用的规定_第2张图片
发现在打包好的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

React Native打包安卓不符合谷歌play关于提供64位版本应用的规定_第3张图片
删除后在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

大功告成!

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

你可能感兴趣的:(android)