1. 程式人生 > >React-Native 專案打包(iOS/Android)

React-Native 專案打包(iOS/Android)

1. Android 打包

第一步:生成Android簽名證書

簽名APK需要一個證書用於為APP簽名,生成簽名證書可以Android Studio以視覺化的方式生成,也可以使用終端採用命令列的方式生成。

第二步:設定gradle變數

1.將你的簽名證書copy到 android/app目錄下。
2.編輯~/.gradle/gradle. properties或../android/gradle.properties(一個是全域性gradle.properties,一個是專案中的gradle.properties,大家可以根據需要進行修改) ,加入如下程式碼:

MYAPP_RELEASE_STORE_FILE=your keystore filename  
MYAPP_RELEASE_KEY_ALIAS=your keystore alias MYAPP_RELEASE_STORE_PASSWORD=***** MYAPP_RELEASE_KEY_PASSWORD=*****

提示:用正確的證書密碼、alias以及key密碼替換掉 *。

第三步:在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 } } } ...

第四步:簽名打包APK

terminal進入專案下的android目錄,執行如下程式碼:./gradlew assembleRelease

簽名打包成功後你會在 “android/app/build/outputs/apk/”目錄下看到簽名成功後的app-release.apk檔案。

提示:如果你需要對apk進行混淆打包 編輯android/app/build.gradle:。

/**     
 * Run Proguard to shrink the Java bytecode in release builds.  
 */
def enableProguardInReleaseBuilds = true

2.iOS打包

第一步:rn專案的ios工程資料夾建立bundle資料夾,然後生成jsbundle

進入rn專案的ios工程資料夾,找到和rn專案同名的檔案件,開啟AppDelegate.m檔案,將這一行註釋掉(為了方便真機和模擬器間的切換,儘量註釋):

 jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index.ios" fallbackResource:nil];

新加一行:

jsCodeLocation = [[NSBundle mainBundle] URLForResource:@"index.ios" withExtension:@"jsbundle"];

如果需要切換回模擬器除錯,只需要將新加這行註釋掉,並恢復原始碼即可。

新加這行程式碼意思就是告訴native rn程式碼的入口,我們會在下一步生成這個jsbundle。

第二步:開啟終端,進入你的rn工程,在根目錄下執行bundle命令

react-native bundle --entry-file ./index.ios.js --bundle-output ./ios/bundle/index.ios.jsbundle --platform ios --assets-dest ./ios/bundle --dev false

引數說明:

  • -entry-file 指定入口檔案 因為要打包ios平臺,所以指定為rn專案的index.ios.js作為入口
  • –bundle-output 指定輸出的jsbundle檔案路徑和檔名 指定到rn專案的ios工程資料夾下,記得一定要先建立bundle資料夾,不然終端會報資料夾找不到的錯誤
  • –platform 指定平臺型別
  • –assets-dest 指定資原始檔夾路徑 assets資料夾的路徑,包含圖片、node模組等資源
  • –dev 是否為開發模式 如果設定為false,不會產生警告,並且bundle會被壓縮
    還有其他命令,比如:transformer、prepack、bundle-encoding等,可以到官網檢視具體介紹。

完成後bundle生成完成後,終端會有類似提示:
這裡寫圖片描述

第三步:用xcode Open another project開啟rn專案的ios工程資料夾
這裡寫圖片描述

配置網路訪問白名單:
開啟info.plist
這裡寫圖片描述

設定應用圖示和啟動圖:

iOS應用中沒有圖示,打包會報錯。

然後,就可以進行打包,流程和原生iOS打包流程一樣,(首先的配置證書)
iOS打包流程可以參照部落格中的打包上線流程:傳送門

注:Ad Hoc 和 App Store 打包過程基本一樣,區別在於生成證書時需選擇相對應的證書。