【React Native】文件翻譯閱讀紀錄 - 指南(Android) - 生成簽名 APK
Facebook Open Source React Native |
Android要求所有應用都必須使用證書進行數字簽名才能安裝,因此要通過Google Play商店分發您的Android應用,您需要生成已簽名的版本APK。 Android開發者文檔上的“簽署您的應用程序”頁面詳細描述了該主題。本指南簡要介紹了該過程,並列出了打包JavaScript包所需的步驟。
生成簽名密鑰
您可以使用keytool生成私有簽名密鑰。在Windows上,必須從
C:\Program Files\Java\jdkx.x.x_x\bin
.$ keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
此命令會提示您輸入密鑰庫和密鑰的密碼,並提供密鑰的“可分辨名稱”字段。然後,它將密鑰庫生成為名為
my-release-key.keystore
的文件。
密鑰庫包含一個密鑰,有效期為10000天。別名是您稍後在簽署應用時使用的名稱,因此請記住注意別名。
在Mac上,如果你不確定你的jdk bin文件夾在哪裡,那麼執行以下命令來找到它,$ / usr / libexec / java_home它將輸出看起來像這樣的jdk的directroy,/ Library / Java / JavaVirtualMachines / jdk1。 8.0_161.jdk / Contents / Home然後通過以下命令導航到該目錄:$ cd /Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/現在您可以使用sudo權限執行keytool命令,如圖所示下面,$ sudo keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000注意:請記住將密鑰庫文件保密,並且永遠不要將其提交給版本控制。
在Mac上,如果你不確定你的jdk bin文件夾在哪裡,那麼執行以下命令來找到它,$ / usr / libexec / java_home它將輸出看起來像這樣的jdk的directroy,/ Library / Java / JavaVirtualMachines / jdk1。 8.0_161.jdk / Contents / Home然後通過以下命令導航到該目錄:$ cd /Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/現在您可以使用sudo權限執行keytool命令,如圖所示下面,$ sudo keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000注意:請記住將密鑰庫文件保密,並且永遠不要將其提交給版本控制。
設置gradle變量
- 將 my-release-key.keystore 文件放在項目文件夾中的 android/app 目錄下。
- 編輯文件
~/.gradle/gradle.properties
或android/gradle.properties
並添加以下內容(用正確的密鑰庫密碼,別名和密鑰密碼替換*****),
MYAPP_RELEASE_STORE_FILE=my-release-key.keystore
MYAPP_RELEASE_KEY_ALIAS=my-key-alias
MYAPP_RELEASE_STORE_PASSWORD=*****
MYAPP_RELEASE_KEY_PASSWORD=*****
這些將成為全局gradle變量,我們稍後可以在gradle配置中使用它來簽署我們的應用程序。
有關保存密鑰庫的注意事項:
在Play商店中發布應用程序後,如果要在任何時候更改簽名密鑰,則需要使用其他程序包名稱重新發布應用程序(丟失所有下載和評級)。所以備份你的密鑰庫,不要忘記密碼。
關於安全性的注意事項:如果您不希望以純文本格式存儲密碼並且運行OSX,則還可以將您的憑據存儲在Keychain Access應用程序中。然後你可以跳過
~/.gradle/gradle.properties
中的最後兩行。將簽名配置添加到應用程序的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
會將運行您的應用程序所需的所有JavaScript捆綁到APK中。如果您需要更改捆綁JavaScript包和/或可繪製資源的方式(例如,如果您更改了默認文件/文件夾名稱或項目的一般結構),請查看 android/app/build.gradle 以查看如何更新它以反映這些變化。
注意:確保gradle.properties不包含org.gradle.configureondemand = true,因為這將使發布版本跳過將JS和資產捆綁到APK中。
生成的APK可以在
android/app/build/outputs/apk/app-release.apk
下找到,並準備發布。測試應用的發布版本
在將發布版本上載到Play商店之前,請確保徹底測試。首先卸載已安裝的任何先前版本的應用程序。使用以下方法將其安裝在設備上
$ react-native run-android --variant=release
請注意
--variant=release
僅在您按上述方式設置簽名時才可用。
您可以終止任何正在運行的打包程序實例,所有框架和JavaScript代碼都捆綁在APK的資產中。
由ABI拆分APK以減小文件大小
默認情況下,生成的APK具有x86和ARMv7a CPU架構的本機代碼。這樣可以更輕鬆地共享幾乎在所有Android設備上運行的APK。但是,這有一個缺點,即任何設備上都會有一些未使用的本機代碼,導致不必要的更大的APK。
您可以通過更改 android/app/build.gradle 中的以下行為每個CPU創建一個APK:
- def enableSeparateBuildPerCPUArchitecture = false
+ def enableSeparateBuildPerCPUArchitecture = true
將這些文件上傳到支持設備定位的市場,例如Google Play和Amazon AppStore,用戶將自動獲得相應的APK。如果您要上傳到其他市場,例如APKFiles,它不支持單個應用的多個APK,請更改以下行以創建默認的通用APK,其中包含兩個CPU的二進製文件。
- universalApk false // If true, also generate a universal APK
+ universalApk true // If true, also generate a universal APK
啟用Proguard以減小APK的大小(可選)
Proguard是一種可以略微減小APK大小的工具。它通過剝離應用程序未使用的部分React Native Java字節碼(及其依賴項)來實現此目的。
重要提示:如果您啟用了Proguard,請務必徹底測試您的應用。 Proguard通常需要特定於您正在使用的每個本機庫的配置。請參閱
app/proguard-rules.pro
.
要啟用Proguard,請編輯
android/app/build.gradle
:/**
* Run Proguard to shrink the Java bytecode in release builds.
*/
def enableProguardInReleaseBuilds = true
0 意見