Android源码分析(二)-----如何编译修改后的framework资源文件
一 : 编译framework资源文件
如果修改android framework资源文件,需要先编译资源文件,然后再编译framework才可以正常引用,
进入项目目录 cd work/source/frameworks/base/core/res/ 执行mm 编译 framework-res.apk(原生或高通)
编译完后com.android.internal.R中会生成资源的引用。
在目录 work/source/frameworks/base/ 下执行mm 编译 framework.jar (原生或高通)
如果 frameworks/base/services 下有修改,则也要编译,在目录 work/source/frameworks/base/services/java/ 执行mm 编译services.jar
二 : 验证修改后的效果
adb root
adb remount
adb push framework-res.apk /system/framework/
adb push framework.jar /system/framework/
adb push secondary_framework.jar /system/framework/ (如果存在secondary_framework.jar,需要push)
adb push services.jar /system/framework/ (如果service有修改,需要push)
adb reboot 重启设备。
adb push可执行文件制作教程,有兴趣的朋友可以参考adb push可执行文件制作教程
三 : 总结
在开发过程中,尤其是framework相关开发时,有时候需要重新编译资源文件.编译顺序和注意事项如下(均在源码根目录):
- 资源文件位置:frameworks/base/core/res,编译后生成的文件:framework-res.apk 另外com.android.internal.R会更新这个R.java所在目录/out/target/common/R/com/android/internal.
- 编译资源后,必须重新编译framework.jar.
- 如果在frameworks/base/core/res执行mm时并不重新编译,请使用toutch filename(文件名)或者mm -B
- 资源文件要小写.
- 如果没有必要,尽可能不要编译资源文件,可以用其他方式使用资源,可用adb push到指定的文件夹进行引用。
喜欢源码分析系列可参考其他文章:
Android源码分析(一)-----如何快速掌握Android编译文件
Android源码分析(二)-----如何编译修改后的framework资源文件的更多相关文章
- Android源码分析二 硬件抽象层(HAL)
一 什么是HAL HAL 可定义一个标准接口以供硬件供应商实现,这可让 Android 忽略较低级别的驱动程序实现.借助 HAL,您可以顺利实现相关功能,而不会影响或更改更高级别的系统.HAL 实现会 ...
- Android源码分析(十二)-----Android源码中如何自定义TextView实现滚动效果
一:如何自定义TextView实现滚动效果 继承TextView基类 重写构造方法 修改isFocused()方法,获取焦点. /* * Copyright (C) 2015 The Android ...
- Android源码分析(九)-----如何修改Android系统默认时间
一 : 修改Android系统默认时间 源码路径:frameworks/base/services/java/com/android/server/SystemServer.java 主要变量EARL ...
- Android源码分析(七)-----如何解决java编译版本问题
一 : 问题描述 Your version is: java version "1.6.0_31" Java(TM) SE Runtime Environment (build 1 ...
- Android源码分析(四)-----Android源码编译及刷机步骤
一 : 获取源码: 每个公司服务器地址不同,以如下源码地址为例: http://10.1.14.6/android/Qualcomm/msm89xx/branches/msm89xx svn环境执行: ...
- Android源码分析(六)-----蓝牙Bluetooth源码目录分析
一 :Bluetooth 的设置应用 packages\apps\Settings\src\com\android\settings\bluetooth* 蓝牙设置应用及设置参数,蓝牙状态,蓝牙设备等 ...
- Android源码分析(十七)----init.rc文件添加脚本代码
一:init.rc文件修改 开机后运行一次: chmod 777 /system/bin/bt_config.sh service bt_config /system/bin/bt_config.sh ...
- Android源码分析(十六)----adb shell 命令进行OTA升级
一: 进入shell命令界面 adb shell 二:创建目录/cache/recovery mkdir /cache/recovery 如果系统中已有此目录,则会提示已存在. 三: 修改文件夹权限 ...
- Android源码分析(十五)----GPS冷启动实现原理分析
一:原理分析 主要sendExtraCommand方法中传递两个参数, 根据如下源码可以知道第一个参数传递delete_aiding_data,第二个参数传递null即可. @Override pub ...
随机推荐
- 移动端适配(rem & viewport)--移动端开发整理笔记(四)
移动端适配 通过rem适配 em: 根据元素自身的字体大小来计算自己的尺寸 rem: (root em) 根据根节点(html)的字体大小来计算自己的尺寸 我们知道,在不同的手机设备,分辨率大小是 ...
- ReplaceGoogleCDN 真的好使
在国内访问 stackoverflow快了很多. 谢谢开发者 https://github.com/justjavac/ReplaceGoogleCDN
- Generator生成器函数执行过程的理解
一个最基本的Generator函数格式如下,函数体内部要使用yield修饰符则必须在函数名前加上*号 ; function *testYield(x){ console.log('before yie ...
- Jmeter实现压力测试(多并发测试)
一.http://jmeter.apache.org/ 二.点击Download Releases选择版本下载 三.下载解压: 将解压后的文档存盘-下载logkit-2.0.jar(汉化包)放到jme ...
- 异步IRP的教训(已附DUMP)
[教训]异步IRP中,IoSetCompletionRoutine()要在IoCallDriver()的前面,不然底层驱动完成了读写之后,找不到完成例程,会导致出错.看似简单,不小心却可能带来大麻烦. ...
- libevent笔记3:evbuffer
evbuffer 之前提到bufferevent结构体提供两个缓存区用来为读写提供缓存,并自动进行IO操作.这两个缓存区是使用Libevent中的evbuffer实现的,同样,Libevent中也提供 ...
- LRU缓存简单实现
缓存接口定义 /** * 缓存接口 * * @author zhi * */ public interface ICache<K, V> { /** * 添加缓存数据 * * @param ...
- DI 依赖注入之unity(mvc)
DI 依赖注入之unity(使用unity.mvc) 一.nuget下载安装: 使用Nuget安装Unity.MVC 安装完成后会在~/App_Start/目录下自动生成UnityMvcActivat ...
- [原创]K8域控植入脚本生成器(内网渗透/RPC不可用解决方案)
0x001 简介 当IPC或WMI无法访问域内机器时,可通过脚本上控. 我们可以在个人机的开机注销重启脚本里配置持久化. 域环境下同样也有开机脚本,但得在在域控机器配置 可以使用BAT\VBS等脚本, ...
- [转帖]Java Netty简介
Java Netty简介 https://www.cnblogs.com/ghj1976/p/3779820.html Posted on 2014-06-10 13:41 蝈蝈俊 阅读(2992) ...