記React Native打包Apk

由於平常在工作中,rn打包都是小夥伴負責,沒有接觸過,懷着忐忑的心情,自己試一般。
參考:

  1. react native 中文網;
  2. Android studio 如何生成jks簽名文件;

我在打包過程中遇到的困難

//這條命令會要求你輸入密鑰庫(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文件。

  1. 第一步:
    在這裏插入圖片描述

  2. 第二步
    在這裏插入圖片描述
    如果你已經有了簽名文件.jsk,那麼就選擇③導入文件,這時①中就是文件的路徑,④是keystore的密碼,⑤是別名,⑥是文件的密碼
    我們這裏默認沒有.jsk文件,所以點擊②新建一個新.jsk文件

  3. 第三步
    在這裏插入圖片描述

  4. 第四步
    在這裏插入圖片描述
    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,它已經可以用來發布了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章