由於平常在工作中,rn打包都是小夥伴負責,沒有接觸過,懷着忐忑的心情,自己試一般。
參考:
我在打包過程中遇到的困難
//這條命令會要求你輸入密鑰庫(keystore)和對應密鑰的密碼,然後設置一些發行相關的信息。最後它會生成一個叫做my-release-key.keystore的密鑰庫文件。
keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
報錯了,沒法生成keystore文件,關於這個錯誤,也做過各種嘗試,解決修改讀寫權限什麼的,沒用。
曲線救國
Android studio 如何生成jks簽名文件,然後用命令行講jks轉化成keystore文件。
-
第一步:
-
第二步
如果你已經有了簽名文件.jsk,那麼就選擇③導入文件,這時①中就是文件的路徑,④是keystore的密碼,⑤是別名,⑥是文件的密碼
我們這裏默認沒有.jsk文件,所以點擊②新建一個新.jsk文件 -
第三步
-
第四步
5.第五步
6.第六步
這個時候你可能點擊finish,無法成功,但是不要緊,你打開你設置key store path的位置,裏面已經出現了jks簽名文件
7,第七步
在當前jks文件路徑下,打開命令行窗口執行
// 首先把jks文件轉爲p12信息文件
keytool -importkeystore -srckeystore H:\ivts.jks(自己jks路徑和文件名) -srcstoretype JKS -deststoretype PKCS12 -destkeystore H:\ivts.p12(自己p12路徑和文件名)
//然後把p12文件轉爲keystore文件
keytool -v -importkeystore -srckeystore H:\ivts.p12(自己p12路徑和文件名) -srcstoretype PKCS12 -destkeystore H:\ivts.keystore(自己keystore路徑和文件名) -deststoretype JKS
設置 gradle 變量
把my-release-key.keystore文件放到你工程中的android/app文件夾下。
編輯~/.gradle/gradle.properties(全局配置,對所有項目有效)或是項目目錄/android/gradle.properties(項目配置,只對所在項目有效)。如果沒有gradle.properties文件你就自己創建一個,添加如下的代碼(注意把其中的****替換爲相應密碼)
注意:~符號表示用戶目錄,比如 windows 上可能是C:\Users\用戶名,而 mac 上可能是/Users/用戶名。
MYAPP_RELEASE_STORE_FILE=my-release-key.keystore
MYAPP_RELEASE_KEY_ALIAS=my-key-alias //剛纔你生成jks時設置的別名
MYAPP_RELEASE_STORE_PASSWORD=***** //剛纔你生成jks時設置的密碼
MYAPP_RELEASE_KEY_PASSWORD=***** //剛纔你生成jks時設置的密碼
上面的這些會作爲 gradle 的變量,在後面的步驟中可以用來給應用簽名。
關於密鑰庫的注意事項:
一旦你在 Play Store 發佈了你的應用,如果想修改簽名,就必須用一個不同的包名來重新發布你的應用(這樣也會丟失所有的下載數和評分)。所以請務必備份好你的密鑰庫和密碼。
提示:如果你不想以明文方式保存密碼,同時你使用的是 macOS 系統,那麼你也可以把密碼保存到鑰匙串(Keychain)中。這樣一來你就可以省略掉上面配置中的後兩行(即 MYAPP_RELEASE_STORE_PASSWORD 和 MYAPP_RELEASE_KEY_PASSWORD)。
把簽名配置加入到項目的 gradle 配置中
編輯你項目目錄下的android/app/build.gradle,添加如下的簽名配置:
...
android {
...
defaultConfig { ... }
signingConfigs {
release {
if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) {
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
}
}
}
...
生成發行 APK 包
只需在終端中運行以下命令:
$ cd android
$ ./gradlew assembleRelease
譯註:cd android表示進入 android 目錄(如果你已經在 android 目錄中了那就不用輸入了)。./gradlew assembleRelease在 macOS、Linux 或是 windows 的 PowerShell 環境中表示執行當前目錄下的名爲 gradlew 的腳本文件,且其運行參數爲 assembleRelease,注意這個./不可省略;而在 windows 的傳統 CMD 命令行下則需要去掉./。
Gradle 的assembleRelease參數會把所有用到的 JavaScript 代碼都打包到一起,然後內置到 APK 包中。如果你想調整下這個行爲(比如 js 代碼以及靜態資源打包的默認文件名或是目錄結構等),可以看看android/app/build.gradle文件,然後琢磨下應該怎麼修改以滿足你的需求。
注意:請確保 gradle.properties 中沒有包含_org.gradle.configureondemand=true_,否則會跳過 js 打包的步驟,導致最終生成的 apk 是一個無法運行的空殼。
生成的 APK 文件位於android/app/build/outputs/apk/release/app-release.apk,它已經可以用來發布了。