AOSP之修改系统App

如何编译APK

在源码环境下,使用mm命令编译module,APK会输出到out/target/product/product_name目录下。

mm -B:强制重新编译,相当于clean后再编译。

Dalvik与ART的区别

Dalvik

JIT(Just-in-time)实时编译,运行的时候将字节码翻译成机器码,所运行的目标(dex)与硬件平台无关,APP运行效率低。

ART

AOT(Ahead-Of-Time,预先编译),运行前将字节码翻译成机器码,所运行的目标文件(oat)与硬件平台相关。APP运行效率高,但是会占用空间,APK安装所需时间增加。

odex是干什么的

dalvik时代:apk运行的时候,会把Apk中的classes.dex解压出来并通过dexopt优化为.odex文件。缓存在/data/dalvick-cache目录下,提高后续执行的效率。

ART时代:APK安装的时候,会把APK中的classes.dex解压后,通过dex2oat工具转换为.odex文件(ELF格式),存储在apk所在的目录的oat目录下。

编译APK的过程

1、进入AOSP系统App目录,下面以Calculator为例

cd android6.0/packages/apps/Calculator复制代码

2、在sublime中打开该项目

subl .复制代码

3、查找需要修改的文件,这里以Calculator.java为例

Ctrl+P复制代码

然后输入Calculator.java

4、查找需要修改的方法,这里以onCreate方法为例

Ctrl+P复制代码

然后在输入@onCreate

5、进行代码的修改并且保存该文件,在onCreate方法中加一个log

Log.wtf("hpp", "this is my first log");复制代码

6、进行命令执行下面命令编译该项目

mm复制代码

7、编译完成之后,通过Install:关键字定位编译输出的文件

我们可以看到生成了一个Calculator.apk 和 一个Calculator.odex

进入这两个文件所在的目录

nautilus $(gettop)/out/target/product/generic/system/app/Calculator/Calculator.apk复制代码

我们会发现Calculator.apk文件中只有资源文件没有代码,代码其实就是这个单独的Calculator.odex。

为什么在源码环境下编译会单独得到odex文件

优点:

1、降低系统更新后启动的时间

为odex的Rom。首次开机的过程会执行odex操作,编译时做,开机的时候就不用做了。

2、减少在设备上进行odex操作所造成的空间浪费

编译时,dexopt/dex2oat,会直接将APK的资源与代码拆开,如果在设备上安装时dexopt/dex2oat,apk的大小不会减少,但又会多一个odex文件占据磁盘空间。

缺点:

1、增加开发时编译的时间

2、不能直接执行APK的install操作,需要将APK和odex都sync到设备上。

如何在开发阶段关闭dex2oat

  • 在当前的module的Android.mk里面关闭,在inclue $(BUILD_PACKAGE)之前加上下面代码
LOCAL_DEX_PREOPT = false复制代码
  • 在buid/core/main.mk中关闭所有module的dex优化
## eng ##

ifeq ($(TARGET_BUILD_VARIANT), eng)

tags_to_install := debug eng

# 关闭odex优化

WITH_DEXPREOPT := false复制代码

安装编译后的APK

adb install -r $(gettop)/out/target/product/generic/system/app/Calculator/Calculator.apk复制代码

查看修改是否生效

运行Calculator应用,过滤log

adb logcat -s 'hpp'复制代码


参考视频:

https://www.365yg.com/i6436850885292196353#mid=1565254704995330

https://www.365yg.com/i6436851843262841346/#mid=1565254704995330

https://www.365yg.com/i6436852898566504962/#mid=1565254704995330

https://www.365yg.com/i6436853799767245314/#mid=1565254704995330


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值