都说工具使我们使用更加方便,然而最近研究-native打包还有webpack这些工具,真是一把心酸一把泪。感觉这些开发工具对window系统十分不友好,外国佬都是都在用mac系统的土豪。
言归正传,今天写下这个打包流程,目的是希望可以帮助那些和我一同奋斗在window系统的童鞋。
我这里会先介绍完整流程,和一些可能会遇到的问题及解决方法
一、完整打包流程
(1)打开packager包在cmd的程序根目录下/-native start(2)在工程目录里 执行 mkdir \app\src\main\assets 这目录是为了存储稍后的离线包(3)生成密匙在cmd的程序根目录下keytool -genkey -v -keystore intelligentlifeandroid.keystore -alias intelligentlifeandroidalias -keyalg RSA -keysize 2048 -validity 10000上述intelligentlifeandroid.keystore以及intelligentlifeandroidalias 都是可修改的(4)设置gradle变量 将(3)申请到的keystore文件放到\app目录下 编辑 \ android \gradle.properties,添加如下的代码(注意:请把其中的** 替代为替换的keystore密码)MYAPP_RELEASE_STORE_FILE=my-release-key.keystoreMYAPP_RELEASE_KEY_ALIAS=my-key-aliasMYAPP_RELEASE_STORE_PASSWORD=*****MYAPP_RELEASE_KEY_PASSWORD=*****(5)添加签名到应用的gradle配置文件 编辑你工程目录下的android/app/build.gradle...android { ... defaultConfig { ... } 拷贝:signingConfigs { release { storeFile file(MYAPP_RELEASE_STORE_FILE) storePassword MYAPP_RELEASE_STORE_PASSWORD keyAlias MYAPP_RELEASE_KEY_ALIAS keyPassword MYAPP_RELEASE_KEY_PASSWORD } } buildTypes { release { ... 拷贝:signingConfig signingConfigs.release } }}(6)cd 到 \android 目录下 使用gradle命令打签名包:gradlew assembleRelease (打包前应该确保react-native start已开启)打包成功后会在 android\app\build\outputs\apk内 找到app-release.apk 就是签名apk。 (7)如果想重新打包,在\android 目录下使用命令:gradlew clean(清除文件)(确保react-native start已开启)接着在执行命令6(8)执行一次后再次打包只需直接执行(6)或(7)
二、打包过程可能会出现的一些问题:
1.查看gradle环境
C:\Users\用户\.gradle\wrapper\dists的gradle2.XX的压缩文件完整与否2.报:.util.zip.ZipException: error in opening zip file
编译环境与生成环境的JDK版本不一样3.报:':app:bundleReleaseJsAndAssets'在\android\app\react.gradle文件修改前:if (Os.isFamily(Os.FAMILY_WINDOWS)) { commandLine "cmd", "/c", "react-native", "bundle", "--platform", "android", "--dev", "${devEnabled}", "--entry-file", entryFile, "--bundle-output", jsBundleFile, "--assets-dest", resourcesDir } else { commandLine "react-native", "bundle", "--platform", "android", "--dev", "${devEnabled}", "--entry-file", entryFile, "--bundle-output", jsBundleFile, "--assets-dest", resourcesDir }修改后:if (Os.isFamily(Os.FAMILY_WINDOWS)) { commandLine "cmd", "/c", "node", "node_modules/react-native/local-cli/cli.", "bundle", "--platform", "android", "--dev", "${devEnabled}", "--entry-file", entryFile, "--bundle-output", jsBundleFile, "--assets-dest", resourcesDir } else { commandLine "node", "node_modules/react-native/local-cli/cli.js", "bundle", "--platform", "android", "--dev", "${devEnabled}", "--entry-file", entryFile, "--bundle-output", jsBundleFile, "--assets-dest", resourcesDir }