(一)打包:
? ? ? ? 1洽腺、生成一個簽名密鑰:
? ? ? ? ? ? ? ? ? ?你可以用keytool命令生成一個私有密鑰瞻赶。在Windows上keytool命令放在JDK的bin目錄中(比如C:\Program Files\Java\jdkx.x.x_x\bin)们拙,先進入那個目錄才能執(zhí)行此命令:keytool -genkey -v -keystoremy-release-key.keystore -aliasmy-key-alias-keyalg RSA -keysize2048-validity10000? ? ?按照操作步驟操作即可? ?完成后生成my-release-key.keystore文件
? ? ? ? 2、設(shè)置gradle變量:
? ? ? ? ? ? ? ? ① 把my-release-key.keystore文件放到你工程中的android/app文件夾下
? ? ? ? ? ? ? ? ② gradle.properties(沒有該文件就創(chuàng)建一個),添加如下的代碼(注意把其中的****替換為相應(yīng)密碼)? ? ? ?
? ? ? ? ? ? ? ? ? ? MYAPP_RELEASE_STORE_FILE=my-release-key.keystore
? ? ? ? ? ? ? ? ? ? MYAPP_RELEASE_KEY_ALIAS=my-key-alias
? ? ? ? ? ? ? ? ? ? MYAPP_RELEASE_STORE_PASSWORD=*****
? ? ? ? ? ? ? ? ? ? MYAPP_RELEASE_KEY_PASSWORD=*****
? ? ? ? 3契吉、添加簽名到項目的gradle配置文件:編輯項目目錄下的android/app/build.gradle
? ? ? ? ? ? ? ?android {?
? ? ? ? ? ? ? ? ? ? ? ? ?...?
? ? ? ? ? ? ? ? ? ? ? ? ?defaultConfig { ... }?
? ? ? ? ? ? ? ? ? ? ? ? ?signingConfigs {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? release {?
?????????????????????????????????????????storeFilefile(MYAPP_RELEASE_STORE_FILE)?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?storePassword MYAPP_RELEASE_STORE_PASSWORD?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? keyAlias MYAPP_RELEASE_KEY_ALIAS?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? keyPassword MYAPP_RELEASE_KEY_PASSWORD }
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? buildTypes {?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? release {?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?...
???????????????????????????????????????????????????signingConfig signingConfigs.release?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
?????????????????????????????????}
? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? 4、生成發(fā)行APK包:進入項目的android目錄? 然后運行命令
? ? ? ? ? ? ? ? ? ?mac: ./gradlew assembleRelease? ? ? ??
? ?????????????????window:gradlew assembleRelease
? ??????????????????生成的APK文件位于android/app/build/outputs/apk/app-release.apk屑迂,它已經(jīng)可以用來發(fā)布了
(二)報錯信息及處理:What went wrong:
???????????????????????Execution failed for task ':app:processReleaseResources'.
? ? ? ? ? ? ? ? ? ? ? ??> Failed to execute aapt
? ? ? ? 1浸策、node_modules_reactnavigation_src_views_assets_backicon.png, but the error?uncompiled PNG file passed as argument. Must be compiled first into .flat file.. error: failed parsing overlays.
? ? ? ? ? ? ? ? 原因及解決方法:在gradle.properties文件中添加以下行:android.enableAapt2 = false,它實質(zhì)上使用舊的aapt來獲取資源惹盼。
? ? ? ? ?2庸汗、添加上述問題后可能還會出現(xiàn)Duplicate file, Original is here. The version qualifier may be?implied.
? ? ? ? ? ? ? ? 原因及解決方法:自定義node_modules / react-native / react.gradle以完美地解決重復(fù)文件錯誤擂找。將以下代碼添加到currentBundleTask創(chuàng)建塊(在doFirst塊之后)
? ? ? ? ? ? ? ? doLast {
? ? ? ? ? ? ? ? ? ? ? ?def moveFunc = { resSuffix ->
? ? ? ? ? ? ? ? ? ? ? ? ? ? File originalDir = file("${resourcesDir}/drawable-${resSuffix}")
? ? ? ? ? ? ? ? ? ? ? ? ? ? if (originalDir.exists()) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?File destDir = file("${resourcesDir}/drawable-${resSuffix}-v4")
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ant.move(file: originalDir, tofile: destDir)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ? ? ? ? ?moveFunc.curry("ldpi").call()
? ? ? ? ? ? ? ? ? ? ? ? ?moveFunc.curry("mdpi").call()
? ? ? ? ? ? ? ? ? ? ? ? ?moveFunc.curry("hdpi").call()
? ? ? ? ? ? ? ? ? ? ? ? ?moveFunc.curry("xhdpi").call()
? ? ? ? ? ? ? ? ? ? ? ? ?moveFunc.curry("xxhdpi").call()
? ? ? ? ? ? ? ? ? ? ? ? ?moveFunc.curry("xxxhdpi").call()
? ? ? ? ? ? ? ? ?}