命令行打包 Android APK

  • 注意
  • 安裝軟件包管理器
    • MAC 電腦
    • Windows 電腦
      • cmd.exe 中安裝
      • PowerShell.exe 中安裝
  • 安裝 JDK8
    • Mac os
    • Windows
  • 安裝 Gradle
    • Mac os
    • Windows
  • 安裝 Android SDK
    • Mac os
    • Windows
  • 安裝 androd build-tools
  • 構建調(diào)試 APK
  • 構建發(fā)布版本 APK
    • 生層私鑰
    • 配置Gradle來構建應用
    • 不使用 Gradle 配置使用命令行
      • 構建未簽名的 apk
      • 使用 zipalign 對齊未簽名的 APK
      • 通過 apksigner 使用您的私鑰為 APK 簽名
      • 驗證簽名
  • 環(huán)境變量的配置
    • Mac
    • Windows
  • 查看 APK 簽名命令

注意

版本的不同徒坡,安裝目錄也會有所變化。

安裝軟件包管理器

MAC 電腦

Iterm 中安裝 Homebrew:
https://brew.sh/index_zh-cn

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

Windows 電腦

安裝 Choco:
https://chocolatey.org/docs/installation#non-administrative-install

cmd.exe 中安裝

@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command " [System.Net.ServicePointManager]::SecurityProtocol = 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"

PowerShell.exe 中安裝

Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))

安裝 JDK8

Mac os

brew tap adoptopenjdk/openjdk
brew install adoptopenjdk8

java8 安裝失敗轩缤,可以安裝java9

brew install adoptopenjdk9

Windows

choco install jdk8

安裝 Gradle

Mac os

brew install gradle

安裝路徑:/usr/local/Cellar/gradle/5.0/bin

Windows

choco install gradle

安裝路徑:C:\ProgramData\chocolatey\lib-bkp\gradle\tools\gradle-6.3\bin

安裝 Android SDK

這里會提示安裝 jdk钻哩,可以跳過安裝jkd戈鲁。

Mac os

brew install android-sdk

安裝路徑:/usr/local/Caskroom/android-sdk

Windows

choco install android-sdk

安裝路徑:C:\Android\android-sdk

安裝 androd build-tools

windows sdkmanager 在路徑 C:\Android\android-sdk\tools\bin 中。
mac sdkmanager 在路徑 /usr/local/Caskroom/android-sdk/4333796/tools 中。

sdkmanager "platforms;android-28"

指定詳細版本進行安裝:

sdkmanager "build-tools;29.0.1"

Windows 安裝路徑:C:\Android\android-sdk\build-tools\29.0.1
Mac 安裝路徑: /usr/local/Caskroom/android-sdk/4333796/build-tools/29.0.1

構建調(diào)試 APK

在此之前你需要修改 local.properties 文件中的 sdk 路徑杰妓。

請打開命令行,然后轉到項目的根目錄:

gradlew assembleDebug

將在 project_name/module_name/build/outputs/apk/ 中創(chuàng)建一個名為 module_name-debug.apk 的 APK碘勉。 該文件已使用調(diào)試密鑰進行簽名并使用 zipalign 對齊巷挥,因此您可以立即將其安裝到設備上。

構建 APK 并立即在運行的模擬器或連接的設備上安裝:

gradlew installDebug

構建發(fā)布版本 APK

在此之前你需要修改 local.properties 文件中的 sdk 路徑验靡。

生層私鑰

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

生成一個名為 my-release-key.jks 的密鑰庫文件倍宾,并將其保存在當前目錄中。

配置Gradle來構建應用

android {
        ...
        defaultConfig { ... }
        signingConfigs {
            release {
           
                // You need to specify either an absolute path or include the
                // keystore file in the same directory as the build.gradle file.
                storeFile file("my-release-key.jks")
                storePassword "password"
                keyAlias "my-alias"
                keyPassword "password"
            }
        }
        buildTypes {
            release {
                signingConfig signingConfigs.release
                debuggable false
                zipAlignEnabled true
                shrinkResources true
                minifyEnabled true
                ...
            }
        }
    }
    

構建 apk:

gradlew assembleRelease

當您通過調(diào)用 Gradle 任務來構建您的應用時胜嗓,Gradle 會為您的應用簽名(并運行 zipalign)高职。

不使用 Gradle 配置使用命令行

下面使用的 zipalign apksigner 在 build-tools 目錄下。

構建未簽名的 apk

gradlew assembleRelease

使用 zipalign 對齊未簽名的 APK

    zipalign -v -p 4 my-app-unsigned.apk my-app-unsigned-aligned.apk
    

zipalign 可以確保所有未壓縮數(shù)據(jù)的開頭均相對于文件開頭執(zhí)行特定的字節(jié)對齊辞州,從而減少應用占用的 RAM 量怔锌。

通過 apksigner 使用您的私鑰為 APK 簽名

    apksigner sign --ks my-release-key.jks --out my-app-release.apk my-app-unsigned-aligned.apk
    

用存儲在單個密鑰庫文件 my-release-key.jks 中的私鑰和證書為 APK 簽名后,將以 my-app-release.apk 的形式輸出已簽名的 APK变过。

通過 jarsigner 使用您的私鑰為 APK 簽名

jarsigner -verbose -keystore [簽名文件路徑] -signedjar [簽名后apk的文件路徑] [未簽名apk的文件路徑] [證書別名]

驗證簽名

 apksigner verify my-app-release.apk

環(huán)境變量的配置

Mac

~/.bash_profile(如果使用iterm則是~/.zshrc)文件中添加:

export ANDROID_HOME=/usr/local/Caskroom/android-sdk
export PATH=$PATH:$ANDROID_HOME/4333796/tools
export PATH=$PATH:$ANDROID_HOME/4333796/build-tools/29.0.1

export GRADLE_HOME=/usr/local/Cellar/gradle
export PATH=$GRADLE_HOME/5.0/bin

Windows

C:\Android\android-sdk\tools\bin
C:\Android\android-sdk\build-tools\29.0.1
C:\ProgramData\chocolatey\lib-bkp\gradle\tools\gradle-6.3\bin

查看 APK 簽名命令

keytool -list -printcert -jarfile app-relase-.apk
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末埃元,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子牵啦,更是在濱河造成了極大的恐慌亚情,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哈雏,死亡現(xiàn)場離奇詭異楞件,居然都是意外死亡,警方通過查閱死者的電腦和手機裳瘪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進店門土浸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人彭羹,你說我怎么就攤上這事黄伊。” “怎么了派殷?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵还最,是天一觀的道長墓阀。 經(jīng)常有香客問我,道長拓轻,這世上最難降的妖魔是什么斯撮? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮扶叉,結果婚禮上勿锅,老公的妹妹穿的比我還像新娘。我一直安慰自己枣氧,他們只是感情好溢十,可當我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著达吞,像睡著了一般张弛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上宗挥,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天乌庶,我揣著相機與錄音,去河邊找鬼契耿。 笑死瞒大,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的搪桂。 我是一名探鬼主播透敌,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼踢械!你這毒婦竟也來了酗电?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤内列,失蹤者是張志新(化名)和其女友劉穎撵术,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體话瞧,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡嫩与,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了交排。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片划滋。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖埃篓,靈堂內(nèi)的尸體忽然破棺而出处坪,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布同窘,位于F島的核電站玄帕,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏塞椎。R本人自食惡果不足惜桨仿,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望案狠。 院中可真熱鬧,春花似錦钱雷、人聲如沸骂铁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拉庵。三九已至,卻和暖如春套蒂,著一層夾襖步出監(jiān)牢的瞬間钞支,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工操刀, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留烁挟,地道東北人。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓骨坑,卻偏偏與公主長得像撼嗓,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子欢唾,可洞房花燭夜當晚...
    茶點故事閱讀 45,851評論 2 361