React Native 打包APK


title: React Native 打包APK
tags: [Android, React Native]
categories: React Native
description:


React Native 打包APK

生成一個(gè)簽名密鑰

你可以用keytool命令生成一個(gè)私有密鑰片排。在Windows上keytool命令放在JDK的bin目錄中(比如C:\Program Files\Java\jdkx.x.x_x\bin)纺座,你可能需要在命令行中先進(jìn)入那個(gè)目錄才能執(zhí)行此命令。

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

這條命令會(huì)要求你輸入密鑰庫(kù)(keystore)和對(duì)應(yīng)密鑰的密碼艳悔,然后設(shè)置一些發(fā)行相關(guān)的信息。最后它會(huì)生成一個(gè)叫做my-release-key.keystore的密鑰庫(kù)文件讥电。

在運(yùn)行上面這條語(yǔ)句之后登夫,密鑰庫(kù)里應(yīng)該已經(jīng)生成了一個(gè)單獨(dú)的密鑰,有效期為10000天允趟。--alias參數(shù)后面的別名是你將來(lái)為應(yīng)用簽名時(shí)所需要用到的,所以記得記錄這個(gè)別名鸦致。

注意: 請(qǐng)記得妥善地保管好你的密鑰庫(kù)文件潮剪,不要上傳到版本庫(kù)或者其它的地方。

設(shè)置gradle變量

  1. 把my-release-key.keystore文件放到你工程中的android/app文件夾下分唾。
  2. 編輯~/.gradle/gradle.properties(沒(méi)有這個(gè)文件你就創(chuàng)建一個(gè))抗碰,添加如下的代碼(注意把其中的****替換為相應(yīng)密碼)

注意: ~表示用戶目錄,比如windows上可能是C:\Users\用戶名绽乔,而mac上可能是/Users/用戶名弧蝇。

MYAPP_RELEASE_STORE_FILE=my-release-key.keystore
MYAPP_RELEASE_KEY_ALIAS=my-key-alias
MYAPP_RELEASE_STORE_PASSWORD=*****
MYAPP_RELEASE_KEY_PASSWORD=*****

上面的這些會(huì)作為全局的gradle變量,我們?cè)诤竺娴牟襟E中可以用來(lái)給應(yīng)用簽名折砸。

關(guān)于密鑰庫(kù)的注意事項(xiàng):
一旦你在Play Store發(fā)布了你的應(yīng)用看疗,如果想修改簽名,就必須用一個(gè)不同的包名來(lái)重新發(fā)布你的應(yīng)用(這樣也會(huì)丟失所有的下載數(shù)和評(píng)分)睦授。所以請(qǐng)務(wù)必備份好你的密鑰庫(kù)和密碼两芳。

提示:如果你不想以明文方式保存密碼,同時(shí)你使用的是macOS系統(tǒng)去枷,那么你也可以把密碼保存到鑰匙串(Keychain)中怖辆。這樣一來(lái)你就可以省略掉上面配置中的后兩行(即MYAPP_RELEASE_STORE_PASSWORD和MYAPP_RELEASE_KEY_PASSWORD)。

添加簽名到項(xiàng)目的gradle配置文件

編輯你項(xiàng)目目錄下的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
        }
    }
}
...

生成發(fā)行APK包

只需在終端中運(yùn)行以下命令:

cd android && ./gradlew assembleRelease

注意: cd android表示進(jìn)入android目錄(如果你已經(jīng)在android目錄中了那就不用輸入了)竖螃。./gradlew assembleRelease在macOS和Linux系統(tǒng)中表示執(zhí)行當(dāng)前目錄下的名為gradlew的腳本文件,運(yùn)行參數(shù)為assembleRelease逗余,注意這個(gè)./不可省略特咆;而在windows命令行下則需要去掉./。

Gradle的assembleRelease參數(shù)會(huì)把所有用到的JavaScript代碼都打包到一起猎荠,然后內(nèi)置到APK包中坚弱。如果你想調(diào)整下這個(gè)行為(比如js代碼以及靜態(tài)資源打包的默認(rèn)文件名或是目錄結(jié)構(gòu)等),可以看看android/app/build.gradle文件关摇,然后琢磨下應(yīng)該怎么修改以滿足你的需求荒叶。

生成的APK文件位于android/app/build/outputs/apk/app-release.apk,它已經(jīng)可以用來(lái)發(fā)布了输虱。

測(cè)試應(yīng)用的發(fā)行版本

在把發(fā)行版本提交到Play Store之前些楣,你應(yīng)該做一次最終測(cè)試。輸入以下命令可以在設(shè)備上安裝發(fā)行版本:

cd android && ./gradlew installRelease

注意installRelease參數(shù)只能在你完成了上面的簽名配置之后才可以使用。 你現(xiàn)在可以關(guān)掉運(yùn)行中的packager了愁茁,因?yàn)槟闼械拇a和框架依賴已經(jīng)都被打包到apk包中蚕钦,可以離線運(yùn)行了。

啟用Proguard代碼混淆來(lái)縮小APK文件的大卸旌堋(可選)

Proguard是一個(gè)Java字節(jié)碼混淆壓縮工具嘶居,它可以移除掉React Native Java(和它的依賴庫(kù)中)中沒(méi)有被使用到的部分,最終有效的減少APK的大小促煮。

重要:?jiǎn)⒂肞roguard之后邮屁,你必須再次全面地測(cè)試你的應(yīng)用。Proguard有時(shí)候需要為你引入的每個(gè)原生庫(kù)做一些額外的配置菠齿。參見(jiàn)app/proguard-rules.pro文件佑吝。

要啟用Proguard,設(shè)置minifyEnabled選項(xiàng)為true:

/**
 * 在release發(fā)行版中啟用Proguard來(lái)減小 to shrink the Java bytecode in release builds.
 */
def enableProguardInReleaseBuilds = true
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末绳匀,一起剝皮案震驚了整個(gè)濱河市芋忿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌疾棵,老刑警劉巖戈钢,帶你破解...
    沈念sama閱讀 216,843評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異陋桂,居然都是意外死亡逆趣,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門嗜历,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)宣渗,“玉大人,你說(shuō)我怎么就攤上這事梨州『鄞眩” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,187評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵暴匠,是天一觀的道長(zhǎng)鞍恢。 經(jīng)常有香客問(wèn)我,道長(zhǎng)每窖,這世上最難降的妖魔是什么帮掉? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,264評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮窒典,結(jié)果婚禮上蟆炊,老公的妹妹穿的比我還像新娘。我一直安慰自己瀑志,他們只是感情好涩搓,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,289評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布污秆。 她就那樣靜靜地躺著,像睡著了一般昧甘。 火紅的嫁衣襯著肌膚如雪良拼。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,231評(píng)論 1 299
  • 那天充边,我揣著相機(jī)與錄音庸推,去河邊找鬼。 笑死浇冰,一個(gè)胖子當(dāng)著我的面吹牛予弧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播湖饱,決...
    沈念sama閱讀 40,116評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼杀捻!你這毒婦竟也來(lái)了井厌?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,945評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤致讥,失蹤者是張志新(化名)和其女友劉穎仅仆,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體垢袱,經(jīng)...
    沈念sama閱讀 45,367評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡墓拜,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,581評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了请契。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片咳榜。...
    茶點(diǎn)故事閱讀 39,754評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖爽锥,靈堂內(nèi)的尸體忽然破棺而出涌韩,到底是詐尸還是另有隱情,我是刑警寧澤氯夷,帶...
    沈念sama閱讀 35,458評(píng)論 5 344
  • 正文 年R本政府宣布臣樱,位于F島的核電站,受9級(jí)特大地震影響腮考,放射性物質(zhì)發(fā)生泄漏雇毫。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,068評(píng)論 3 327
  • 文/蒙蒙 一踩蔚、第九天 我趴在偏房一處隱蔽的房頂上張望棚放。 院中可真熱鬧,春花似錦寂纪、人聲如沸席吴。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,692評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)孝冒。三九已至柬姚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間庄涡,已是汗流浹背量承。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,842評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留穴店,地道東北人撕捍。 一個(gè)月前我還...
    沈念sama閱讀 47,797評(píng)論 2 369
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像泣洞,于是被迫代替她去往敵國(guó)和親忧风。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,654評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,085評(píng)論 25 707
  • 安卓項(xiàng)目發(fā)布到真機(jī)上測(cè)試需要打包成apk球凰。就介紹下打包流程: 1. 產(chǎn)生簽名的key 該過(guò)程會(huì)用到keytool狮腿,...
    wtfysa閱讀 748評(píng)論 0 3
  • 1.介紹 如果你正在查閱build.gradle文件的所有可選項(xiàng),請(qǐng)點(diǎn)擊這里進(jìn)行查閱:DSL參考 1.1新構(gòu)建系統(tǒng)...
    Chuckiefan閱讀 12,131評(píng)論 8 72
  • 經(jīng)過(guò)一段時(shí)間的試運(yùn)行呕诉,本策略效果尚可缘厢。但是,經(jīng)過(guò)最近一段時(shí)間的暴跌驗(yàn)證甩挫,策略的問(wèn)題還是比較明顯的贴硫,主要表現(xiàn)在以下幾...
    yekki閱讀 200評(píng)論 0 1
  • 家長(zhǎng)問(wèn):為什么我的孩子總是“破罐破摔”? 答:因?yàn)槟憧偘阉闯善乒抟琳撸运牌扑ぁ?家長(zhǎng)問(wèn):為什么我的孩子不聽(tīng)話英遭,...
    根本源閱讀 117評(píng)論 0 0