美文网首页Android
命令行打包 Android APK

命令行打包 Android APK

作者: 鸡蛋绝缘体 | 来源:发表于2020-06-08 12:51 被阅读0次
    • 注意
    • 安装软件包管理器
      • MAC 电脑
      • Windows 电脑
        • cmd.exe 中安装
        • PowerShell.exe 中安装
    • 安装 JDK8
      • Mac os
      • Windows
    • 安装 Gradle
      • Mac os
      • Windows
    • 安装 Android SDK
      • Mac os
      • Windows
    • 安装 androd build-tools
    • 构建调试 APK
    • 构建发布版本 APK
      • 生层私钥
      • 配置Gradle来构建应用
      • 不使用 Gradle 配置使用命令行
        • 构建未签名的 apk
        • 使用 zipalign 对齐未签名的 APK
        • 通过 apksigner 使用您的私钥为 APK 签名
        • 验证签名
    • 环境变量的配置
      • 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 cask install adoptopenjdk8
    

    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 cask 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

    构建调试 APK

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

    请打开命令行,然后转到项目的根目录:

    gradlew assembleDebug
    

    将在 project_name/module_name/build/outputs/apk/ 中创建一个名为 module_name-debug.apk 的 APK。 该文件已使用调试密钥进行签名并使用 zipalign 对齐,因此您可以立即将其安装到设备上。

    构建 APK 并立即在运行的模拟器或连接的设备上安装:

    gradlew installDebug
    

    构建发布版本 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
    

    当您通过调用 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 可以确保所有未压缩数据的开头均相对于文件开头执行特定的字节对齐,从而减少应用占用的 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。

    验证签名

     apksigner verify my-app-release.apk
    

    环境变量的配置

    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
    

    相关文章

      网友评论

        本文标题:命令行打包 Android APK

        本文链接:https://www.haomeiwen.com/subject/jylbzhtx.html