全命令打包APK

打包APK体验

进行一次安卓手动打包,全程命令行操作

APK构建流程

先看看Google给出的构建流程


build-process_2x.png

典型 Android 应用模块的构建流程(如图 1 所示)按照以下常规步骤执行:

  • 编译器将您的源代码转换成 DEX 文件(Dalvik 可执行文件,其中包括在 Android 设备上运行的字节码),并将其他所有内容转换成编译后的资源。
  • 打包器将 DEX 文件和编译后的资源组合成 APK 或 AAB(具体取决于所选的 build 目标)。 必须先为 APK 或 AAB 签名,然后才能将应用安装到 Android 设备或分发到 Google Play 等商店。
  • 打包器使用调试或发布密钥库为 APK 或 AAB 签名:
    • 如果您构建的是调试版应用(即专门用来测试和分析的应用),则打包器会使用调试密钥库为应用签名。Android Studio 会自动使用调试密钥库配置新项目。
    • 如果您构建的是打算对外发布的发布版应用,则打包器会使用发布密钥库(您需要进行配置)为应用签名。如需创建发布密钥库,请参阅在 Android Studio 中为应用签名。
  • 在生成最终 APK 之前,打包器会使用 zipalign 工具对应用进行优化,以减少其在设备上运行时所占用的内存。
    构建流程结束时,您将获得应用的调试版或发布版 APK/AAB,以用于部署、测试或向外部用户发布。

准备工作

  1. 开启AndroidStudio新建项目Empty工程
  2. 删除无用用资源文件 仅保留可支行的资源文件(方便后面操作)

打包APK流程

1. 编译资源文件

新版本已经使用aapt2来替代appt工具
aapt2支持单个文件修改生成中间文件,可以做到增量修改

使用appt2 compile转义资源文件,将资源文件转成flat的文件,可以单个文件进行处理,这样当单个文件发生变化时可以再将单个文件进行处理,不需要每次全量

这里为操作方便对文件夹进行统一编译
语法:

aapt2 compile path-to-input-files [options] -o output-directory/

命令:

aapt2 compile --dir app/src/main/res -o compiled/ 

-o指定生成文件的存储路径 如果生成失败或不是文件夹 可以手动创建compiled文件夹

操作完成会在执行目录下生成所有资源文件的中转文件: (删除过很多资源文件,仅保留可让apk运行的文件)

         compiled/---- 
             |---- compiled/drawable_ic_launcher.webp.flat

             |---- compiled/drawable_ic_launcher_background.xml.flat

             |---- compiled/layout_activity_main.xml.flat

             |---- compiled/values_colors.arsc.flat

             |---- compiled/values_strings.arsc.flat

2. 生成R文件和apk文件

在链接阶段,AAPT2 会合并在编译阶段生成的所有中间文件(如资源表、二进制 XML 文件和处理过的 PNG 文件),并将它们打包成一个 APK。此外,在此阶段还会生成其他辅助文件,如 R.java 和 ProGuard 规则文件。不过,生成的 APK 不包含 DEX 字节码且未签名。也就是说,您无法将此 APK 部署到设备。如果您不使用 Android Gradle 插件从命令行构建应用,则可以使用其他命令行工具,如使用 d8 将 Java 字节码编译为 DEX 字节码,以及使用 apksigner 为 APK 签名。

语法 :

aapt2 link path-to-input-files [options] -o outputdirectory/outputfilename.apk --manifest AndroidManifest.xml

命令 :

aapt2 link -o resourece.apk -I /Users/chao/Library/Android/sdk/platforms/android-29/android.jar compiled/drawable_ic_launcher.webp.flat compiled/drawable_ic_launcher_background.xml.flat compiled/layout_activity_main.xml.flat compiled/values_colors.arsc.flat compiled/values_strings.arsc.flat  --java app/src/main/java --manifest app/src/main/AndroidManifest.xml --min-sdk-version 21

-o 指向的文件就是生成的apk文件,
-I 指向的是资源文件生成的所有flat文件
--java 指向生成的R文件位置即java文件的位置
--manifest 指向应用的AndroidManifest文件
--min-sdk-version 指定最小版本号

完成后会在 java代码中生成R.class
在生成-o指定的apk文件

3. 生成class文件

将上一步生成的R.java和其他java文件编译成class文件

命令 :

javac -d build -cp /Users/chao/Library/Android/sdk/platforms/android-29/android.jar app/src/main/java/com/chao/buildapk/*.java

-cp 告诉jvm,需要用到的类路径可以在对应路径下查找
完成后会在build目录下生成对应的class文件

4. 转dex文件

将class文件转译打包成dex文件

命令 :

/Users/chao/Library/Android/sdk/build-tools/29.0.2/dx --dex --output=classes.dex build

5. dex文件打包进apk

使用zip命令将dex文件放入apk中

命令 :

zip resourece.apk classes.dex 

6. 签名apk

因为方便直接使用自带的debug.keystore签名apk

命令 :

jarsigner -verbose -keystore ~/.android/debug.keystore -signedjar resource_sign.apk resourece.apk androiddebugkey -digestalg SHA1 -sigalg MD5withRSA

密码: android

最后安卓文件

adb install -t resourece.apk

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容