这里讲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.*
就打包成功了。