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 ...
随机推荐
- 排序算法-冒泡排序(Java)
package com.rao.sort; import java.util.Arrays; /** * @author Srao * @className BubbleSort * @date 20 ...
- Django API 自定义状态码
class BaseResponse(object): def __init__(self): self.code = 1000 self.data = None self.error = None ...
- vue-cli3.0启动项目,在局域网内其他电脑通过自己ip访问
最近一直在使用vue-cli3.0做项目, package.json中配置后,自启动项目,也就没留意过小黑窗, "scripts": { "serve": &q ...
- javascript中 encodeURIComponent() 与 encodeURI() 的区别
前言:js 中仅有的几个全局函数中,有两个全局函数可以用来编码url 字符串. 一.encodeURIComponent() 将转义用于分隔 URI 各个部分的标点符号 ,也就是可以编码 " ...
- # 数位DP入坑
Hdu 2089 不要62 #include<iostream> #include<cstdio> #include<cmath> #include<cstr ...
- Solr的核心操作案例
@Service public class SearchServiceImpl implements SearchService { @Autowired private SolrTemplate s ...
- nexus没有授权导致的错误
错误详情信息: 错误信息: [ERROR] Failed to execute goal on project blog: Could not resolve dependencies for pro ...
- ReentrantLock源码简析
概念 ReentrantLock,可重入锁.在多线程中,可以通过加锁保证线程安全. 加锁和解锁 加锁: public void lock() { sync.lock(); } 解锁 public vo ...
- 【Kubernetes学习之二】Kubernetes集群安装
环境 centos 7 Kubernetes有三种安装方式:yum.二进制.kubeadm,这里演示kubeadm. 一.准备工作1.软件版本 软件 版本 kubernetes v1.15.3 Cen ...
- Alpha冲刺——总结篇
课程信息 课程 软件工程1916|W(福州大学) 团队名称 修!咻咻! 作业要求 项目Alpha冲刺 团队目标 切实可行的计算机协会维修预约平台 团队信息 队员学号 队员姓名 个人博客地址 备注 22 ...