Android 打包記

Android 打包記

安卓打包相比iOS算是簡單的多的多了,沒有那么 多證書限制

安卓打包只需要一個簽名文件(keystore),能證明這個包(apk)是屬于你的就行了

一、生成keystore

兩種方法可以生成keystore

(1) Android Studio (V3.4.2)






操作完成后,在android/路徑下會生成一個名為adnpack_dist.keystore的文件

關(guān)于Signature Versions: V1, V2 請參考 https://blog.csdn.net/lvshuchangyin/article/details/62227286

(2) keytool命令 CLI

$ keytool -genkey -v -keystore andpack_dist_cli.keystore -alias andpack_dist_cli -keyalg RSA -keysize 2048 -validity 10000  

輸出:

輸入密鑰庫口令:  
再次輸入新口令: 
您的名字與姓氏是什么?
  [Unknown]:  yongqianvip
您的組織單位名稱是什么?
  [Unknown]:  com
您的組織名稱是什么?
  [Unknown]:  com
您所在的城市或區(qū)域名稱是什么?
  [Unknown]:  bj
您所在的省/市/自治區(qū)名稱是什么?
  [Unknown]:  bj
該單位的雙字母國家/地區(qū)代碼是什么?
  [Unknown]:  CN
CN=yongqianvip, OU=com, O=com, L=bj, ST=bj, C=CN是否正確?
  [否]:  y

正在為以下對象生成 2,048 位RSA密鑰對和自簽名證書 (SHA256withRSA) (有效期為 10,000 天):
         CN=yongqianvip, OU=com, O=com, L=bj, ST=bj, C=CN
輸入 <my-key-alias> 的密鑰口令
        (如果和密鑰庫口令相同, 按回車):  
[正在存儲andpack_dist_cli.keystore]

Warning:
JKS 密鑰庫使用專用格式。建議使用 "keytool -importkeystore -srckeystore andpack_dist_cli.keystore -destkeystore andpack_dist_cli.keystore -deststoretype pkcs12" 遷移到行業(yè)標(biāo)準(zhǔn)格式 PKCS12。

針對CLI執(zhí)行最后的Warning問題,建議參照提示,把我們生成的非標(biāo)準(zhǔn)keystore遷移到標(biāo)準(zhǔn)格式

操作完成后,在android/路徑下生成一個名為adnpack_dist_cli.keystore的文件

二、使用keystore給應(yīng)用簽名

通過上述兩種方式,我們得到了keystore文件(這個文件默認(rèn)是被VCS忽略的,本地保留即可),在工程中通過配置,在打包時用來給包簽名

android/app/build.gradle中編輯以下信息

android {
    ...
    // 簽名配置部分
    signingConfigs{
        release{
        storeFile file("../andpack_dist.keystore")  // keystore相對路徑  
        storePassword "715@1234567"
        keyAlias "andpack_dist"
        keyPassword "715@1234567"
   }
   buildTypes {
        release {
            ...
            signingConfig signingConfigs.release // 配置簽名
        }
    }
    ...
}

android/下執(zhí)行:

$ ./gradlew assembleRelease

一切正常則會在andorid/app/build/outputs/apk/下輸出apk

三、其他

通過上述步驟得到簽名過的apk,已經(jīng)可以用于發(fā)布了,但是實(shí)測過程發(fā)現(xiàn),一個空的工程輸出的apk竟然將近20M大小,這是不能接受的,所以用Android Studio分析一個apk的組成結(jié)構(gòu)


問題很明顯了,沒有選擇目標(biāo)架構(gòu),默認(rèn)包含了 armeabi-v7a, x86, arm64-v8a, x86_64四種架構(gòu),這個可以根據(jù)自己實(shí)際業(yè)務(wù)場景選擇配置,因?yàn)槲也皇亲鯝ndroid 原生開發(fā)的,所以這塊可能解釋的不太清除,請客官自行Google
如果僅保留armeabi-v7a,修改android/app/build.gradle

android {
    ...
    defaultConfig {
        ...
        ndk {
            abiFilters "armeabi-v7a"
        }
    }
    splits {
        abi {
            reset()
            enable enableSeparateBuildPerCPUArchitecture
            universalApk false  // If true, also generate a universal APK
            include "armeabi-v7a"
        }
    }
   ...
}

重新打包,得到的apk包結(jié)構(gòu)如下

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容