1. 程式人生 > >react-native工程 打包

react-native工程 打包

如果做過Android原生開發的,react-native打包跟Android打包就大同小異了,先說明一下,這針對window7系統。

1、看看自己有沒有配好了gradle環境變數,如果配好了,這一步可以跳過。

配置步驟:

先去官網下載自己對應版本的gradle,然後直接解壓即可,我這裡直接解壓在Android開發的相關目錄下

計算機->滑鼠右擊選擇屬性->高階系統設定->高階->環境變數->點選”新建“,配置”GRADLE_HOME“,如圖:


繼續在此處選擇“path”,進行修改,加入“;%GRADLE_HOME%\bin”,注意此處沒有引號,記得前面要加分號(要切換到英文模式),這樣就配置好gradle的環境變量了


配置完後認證一下,可以在cmd控制檯上 輸入echo %path%


看到這個,所以配置成功了。

2.正式開始打包的配置:

第一步:先生成一個簽名的金鑰

keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

這條命令會要求你輸入金鑰庫(keystore)和對應的金鑰的密碼,然後設定一下發行相關的資訊。最後它會生成一個叫做my-release-key.keystore的金鑰庫檔案。

在執行上面這條語句之後,金鑰庫裡應該已經生成了一個單獨的金鑰,有效期為10000天。-alias引數後面的別名是你將來為應用簽名時所需要用到的,所以記得記錄下這個別名。

注:請記得妥善保管好你的金鑰庫檔案,不要上傳到版本庫或者其它地方。

第二步:設定gradle變數

把my-release-key.keystore檔案放到你工程中的android/app資料夾下

添加簽名到應用的gradle配置檔案

...
android {
    ...
    defaultConfig { ... }

//配置簽名
    signingConfigs {
        release {
           storeFile file("/my-release-key.keystore")
   storePassword "******"   //生成金鑰時自己設定的密碼
           keyAlias "my-key-alias"
           keyPassword "******""    //同上
        }
    }


    buildTypes {
        release {
            ...
            signingConfig signingConfigs.release  //引用簽名的配置
        }
    }
}

啟用Proguard程式碼混淆來縮小APK檔案的大小(可選)

Proguard是一個Java位元組碼混淆壓縮工具,它可以移除掉React Native Java(和它的依賴庫中)中沒有被使用到的部分,最終有效的減少APK的大小。

重要:啟用Proguard之後,你必須再次全面地測試你的應用。Proguard有時候需要為你引入的每個原生庫做一些額外的配置。參見app/proguard-rules.pro檔案。

要啟用Proguard,編輯android/app/build.gradle檔案:

/**
 * 執行Proguard來減小發布版本的Java位元組碼大小
 */
def enableProguardInReleaseBuilds = true

第三步:

找到路徑/android/app/src/main,並在該目錄下新建assets資料夾

然後在工程目錄下將index.android.bundle下載並儲存到assets資原始檔夾中,執行的命名:

curl -k "http://localhost:8081/index.android.bundle" > android/app/src/main/assets/index.android.bundle

curl官網下載,下載好直接解壓,然後直接將curl.exe複製貼上到專案的根目錄下即可,配置好這一步,就可以真正進入打包了。

第四步:真正打包

在cmd控制檯切換到專案的/android/目錄中執行gradle assembleRelease命令,打包後的檔案在android/app/build/outputs/apk目錄中,例如app-release.apk。如果打包碰到問題可以先執行 gradle clean 清理一下。

到此就ok了