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

大功告成!

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值