React Native之Android 打包

这里讲RN的打包和混淆中遇到的问题。

http://localhost:8081/index.android.bundle?platform=android当应用启动运行的时候,会自动拉取这个bundle文件,该文件里存放的是应用的全部逻辑代码,在目录中并不存在这个文件,事实上,这个地址只有一个请求地址,而非真正的静态资源文件,是通过包服务器packager通过动态分析Index.android.js中的依赖并对其进行合并得到的,而且该服务允许代码实时渲染。

1.生成签名密钥

keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg
RSA -keysize 2048 -validity 10000

最后它会生成一个叫 my-release-key.keystore的密钥文件。

2.在路径/android/app/src/main路径下面新建assets文件夹

3.在工程目录下降Index.android.bundle下载并且保存到assets资源文件夹下。

curl -k http://lcalhost:8081/index.android.bundle > android/app/src/main/assets/index.android.bundle

这行命令时将网络上index.android.bundle,下载到本地assets目录下。

没有curl命令的可以使用下面的连接进行

http://jingyan.baidu.com/article/a681b0dec4c67a3b1943467c.html

4.添加gradle的Android keyStore配置

signingConfigs{
    release{
        storeFile file("/key/keyStore.jks")
        storePassword "123456"
        keyAlias "key"
        keyPassword "123456"
    }
}
buildTypes {
    release {
        minifyEnabled enableProguardInReleaseBuilds
        proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
        signingConfig signingConfigs.release //引用签名
    }
}

5.启动代码混淆来缩小apk文件的大小。

enableProguardInReleaseBuilds = true;

6.在Android/目录中执行gradle assembleRelease命令,打包后的文件在android/app/build/outputs/apk目录中,例如app-release.apk,如果打包碰到问题,先执行一项Gradle clean.清理一项。

在这一步,我遇到一个问题,打包失败

Warning: com.facebook.fbui.textlayoutbuilder.proxy.StaticLayoutProxy: can't find referenced method 'StaticLayout(j
ava.lang.CharSequence,int,int,android.text.TextPaint,int,android.text.Layout$Alignment,android.text.TextDirectionH
euristic,float,float,boolean,android.text.TextUtils$TruncateAt,int,int)' in library class android.text.StaticLayou
t
Warning: there were 1 unresolved references to library class members.
         You probably need to update the library versions.
         (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedlibraryclassmember)
Exception while processing task      
java.io.IOException: Please correct the above warnings first.
        at proguard.Initializer.execute(Initializer.java:473)
        at proguard.ProGuard.initialize(ProGuard.java:233)
        at proguard.ProGuard.execute(ProGuard.java:98)
        at proguard.gradle.ProGuardTask.proguard(ProGuardTask.java:1074)
        at com.android.build.gradle.tasks.AndroidProGuardTask.doMinification(AndroidProGuardTask.java:139)
        at com.android.build.gradle.tasks.AndroidProGuardTask$1.run(AndroidProGuardTask.java:115)
        at com.android.builder.tasks.Job.runTask(Job.java:48)
        at com.android.build.gradle.tasks.SimpleWorkQueue$EmptyThreadContext.runTask(SimpleWorkQueue.java:41)
        at com.android.builder.tasks.WorkQueue.run(WorkQueue.java:227)
        at java.lang.Thread.run(Thread.java:745)

混淆异常,分析问题后发现in library class android.text.StaticLayout,这段问题是主要为,所以在混淆文件中加入:

-keep class android.text {* ;}
-dontwarn android.text.*

就打包成功了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值