Android7.1编译framework.jar不生效

 版权声明:本文为博主原创文章,转载请联系作者并注明出处。此博客已同步更新至:https://blog.sasurai.cn https://blog.csdn.net/asahinokawa/article/details/79528698

被framework生效问题困了一天, 一定要记下来。试了网上各种答案,得到的结果都没生效。最终还是从同事那里得到的一份答案,还是同事靠谱啊。

一、framework编译方法

一般修改framework层的内容分为两种,一种是res,一种是源代码前者只需要在其目录下,通过mm的方式即可将framework-res.apk编译出来,并且通过将其push到手机/system/framework/目录下,可即时生效。后者则有一箩筐要说。

遇到了修改res下的内容,生成framework-res.apk后推到手机里面后,出现无法开机、资源无法找到的问题。困惑了很久,后来慢慢意识到可能是当前手机的系统版本的原因。手机当前的系统为客户分支系统,而当前的framework-res.apk编译自master分支,客户分支当然有很多master分支没有的东西,所以推送到客户分支所编译出来的系统之后,出现了资源无法找到等奇怪的错误。正确的姿势是将当前的手机系统,刷成master分支所编译出来的系统,然后再进行操作。这个坑靠着自己的直(xia)觉(meng)怕了出来。

1.使用m命令编译framework只有在系统初次编译后第一次使用有效,之后编译会失败,需使用make命令。

2.编译命令及解释

编译指令解释
m在源码树的根目录执行编译
mm编译当前路径下所有模块,但不包含依赖
mmm [module_path]编译指定路径下所有模块,但不包含依赖
mma编译当前路径下所有模块,且包含依赖
mmma [module_path]编译指定路径下所有模块,且包含依赖
make [module_name]无参数,则表示编译整个Android代码

下面列举部分模块的编译指令:

模块make命令mmm命令
initmake initmmm system/core/init
zygotemake app_processmmm frameworks/base/cmds/app_process
system_servermake servicesmmm frameworks/base/services
java frameworkmake frameworkmmm frameworks/base
framework资源make framework-resmmm frameworks/base/core/res
jni frameworkmake libandroid_runtimemmm frameworks/base/core/jni
bindermake libbindermmm frameworks/native/libs/binder

·对于make命令,模块名称未确定时,到相应目录下Android.mk文件中查找 LOCAL_PACKAGE_NAME 值。

通过上面的方法,可以编译成功得到framework.jar文件,但是将其push到/system/framework/后,则不一定会生效。

二、如何让它生效?

一般网上看到的做法是这样:

方法一:

将编译所生成的framework.jar推送到手机相应的位置,重启,看是否生效。如果没有生效,则继续删除/system/framework/arm目录和/system/framework/arm64目录中的boot.artboot.oat删除掉,之后重启机器。

如果这样操作后还是不生效该怎么办?

方法二:

在源代码的根目录,初始化好环境之后,在源代码的根目录下使用make snod,重新打包生成system.img,然后通过fastboot flash system %src_dir%\system.img,将新生成的system.img刷入手机,然后重启。

很遗憾,我还是没有生效。我把上面两者结合起来还是没有生效。。

方法三:

较为花式,请慎重服用。但这种近乎重新刷机的做法,感觉一定会生效

修改好了framework里面的东西之后,全局编译一次,然后将编译得到的结果刷入手机。

注意事项:

  • 如果在修改framework之前就已经进行过全局编译操作,那么在修改后,再进行全局编译,速度则非常快。
  • 如果在修改之后,还进行了git pull操作拉取了其他人对代码的修改,那么此次全局编译的速度就未知,不过基本上很慢。

 

不知道为啥上面的方法无效,下面介绍下新的方法,高通代码加入如下patch全编之后framework目录就不会有oat等目录了。

diff --git a/device/qcom/msm8952_64/BoardConfig.mk b/device/qcom/msm8952_64/BoardConfig.mk
index fdc1465..a9c04f0 100644
--- a/device/qcom/msm8952_64/BoardConfig.mk
+++ b/device/qcom/msm8952_64/BoardConfig.mk
@@ -129,8 +129,8 @@ MAX_VIRTUAL_DISPLAY_DIMENSION := 2048
 # Enable dex pre-opt to speed up initial boot
 ifeq ($(HOST_OS),linux)
   ifeq ($(WITH_DEXPREOPT),)
-    WITH_DEXPREOPT := true
-    WITH_DEXPREOPT_PIC := true
+    WITH_DEXPREOPT := false
+    WITH_DEXPREOPT_PIC := false
     ifneq ($(TARGET_BUILD_VARIANT),user)
       # Retain classes.dex in APK's for non-user builds
       DEX_PREOPT_DEFAULT := nostripping
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值