摘自:http://www.romzhijia.net/shuaji/1584/
1、assets 目录下结构
|———— images
|———— **.png
|———— sounds
|———— **.raw
|———— webkit
|———— **.png ▲ 该目录下的内容一目了然,一般用不到修改,这里就不多说了
2、res 目录下结构及相关解释
|———— anim(该文件夹存放的是 ROM 的动画效果控制文件)
|———— **.xml
|———— color(该文件夹存放的是 ROM 各部位颜色的控制代码)
|———— **.xml
|———— drawable / drawable-**(ROM 的基本资源库,存放各种资源来供控制文件调用)
|———— **.xml / **.png
|———— layout / layout-**(ROM 层面布局控件,简单理解就是控制各个部位的所在位置,如某图标)
|———— **.xml
|———— raw / raw-**(一般情况这些目录不需要动)
|———— **.png / **.ogg / **.html
|———— values / values-**(各种语言包控件)
|———— **.xml
|———— xml / xml-**(全局控制文件,一般情况这些目录不需要动)
|———— **.xml
3、AndroidManifest.xml 和 apktool.yml
AndroidManifest.xml 是每一个应用都需要的文件;
位于应用的根目录下,描述了程序包的一个全局变量;
包括暴露的应用组件(activities, services 等)和为每个组件的实现类;
什么样的数据可以操作,以及在什么地方运行;
▲ 一般情况下不需要动该文件
AndroidManifest.xml 的结构大纲:
《manifest》 文件根节点,描述了程序包的所有内容;
《uses-permission》 请求一个安全授权,必须被授予该权限,程序包才能正确的操作;
《permission》 声明一个安全授权,用来限制哪些应用可以访问程序包内的组件和特有机制;
《instrumentation》
《application》 描述程序包内应用级别组件的根节点,该节点能够描述应用程序的全局和默认属性;
《activity》 应用于用户交互的最主要机制,当一个应用运行的时候,用户看到的第一个屏幕就是 activity;
《intent-filter》
《action》
《category》
《type》
《scheme》
《authority》
《path》
《receiver》 一个 IntentReceiver 可以让应用接收到一次数据变化和一次行为发生的通知;
《service》 Service 是一个在后台任意时刻都可以运行的组件;
《provider》 ContentProvider 组件是用来管理数据持久化及数据发布的,发布的数据可以被其他的应用访问;
apktool.yml 是 apktool 反编译时生成的一个配置文件,不需要动这个文件,重新编译时缺它不可;
4.详细介绍 res \ anim目录
anim 文件夹下即我们通常所说到的动画特效文件
wallpaper_open_exit.xml------------------退出程序移除
wallpaper_open_enter.xml----------------退出程序弹出
wallpaper_intra_open_exit.xml------------程序内部退出移除
wallpaper_intra_open_enter.xml---------程序内部退出弹出
wallpaper_intra_close_exit.xml----------程序内部进入移除
wallpaper_intra_close_enter.xml-------程序内部进入弹出
wallpaper_exit.xml----------------------程序后台移除
wallpaper_enter.xml------------------------程序后台弹出
wallpaper_close_exit.xml------------------进入程序移除
wallpaper_close_enter.xml----------------进入程序弹出
translucent_exit.xml-----------------------选择光标移除
translucent_enter.xml-------------------------选择光标弹出
toast_exit.xml-------------------------------提示窗口移除
toast_enter.xml----------------------------提示窗口弹出
task_open_exit.xml----------------------------任务退出移除
task_open_enter.xml--------------------------任务退出弹出
task_close_exit.xml--------------------------任务进入移除
task_close_enter.xml------------------------任务进入弹出
submenu_exit.xml子--------------------------菜单移除
submenu_enter.xml-------------------------子菜单弹出
status_bar_exit.xml----------------------------状态栏移除
status_bar_enter.xml-------------------------状态栏弹出
slide_out_right.xml-----------------------------右部滑出
slide_out_left.xml--------------------------------左部滑出
slide_out_down.xml-----------------------------下部滑出
slide_in_up.xml------------------------------------上部滑入
slide_in_right.xml-------------------------------------右部滑入
slide_in_left.xml-----------------------------------左部滑入
slide_in_child_bottom.xml------------------------子栏下部滑入
shrink_fade_out_from_bottom.xml-----------------下部渐变滑出
shrink_fade_out_center.xml-----------------------中部渐变滑出
shrink_fade_out.xml---------------------------------渐变滑出
search_bar_exit.xml----------------------------搜索栏移除
search_bar_enter.xml---------------------------搜索栏弹出
recent_exit.xml-----------------------------------最近任务移除
recent_enter.xml----------------------------------最近任务弹出
push_up_out.xml-----------------------------------触控移除
push_up_in.xml------------------------------------触控弹出
push_down_out.xml-------------------------------底部触控移除
push_down_in.xml--------------------------------底部触控弹出
priority_alert_exit.xml---------------------------优先提示栏移除
priority_alert_enter.xml---------------------------优先提示栏弹出
overshoot_interpolator.xml-----------------------多屏切换
options_panel_exit.xml---------------------------选项菜单移除
options_panel_enter.xml--------------------------选项菜单弹出
lock_screen_exit.xml-------------------------------解锁移除
lock_screen_enter.xml------------------------------解锁弹出
lock_screen_controlview_fade_out.xml-----------------解锁渐变弹出
lock_screen_behind_enter.xml-------------------------锁屏后进入
lock_screen_album_fade_out.xml--------------------锁屏后渐变弹出
lock_screen_album_fade_in.xml---------------------锁屏后渐变进入
linear_interpolator.xml---------------------------------线性插补
input_method_fancy_exit.xml----------------------输入法退出移除
input_method_fancy_enter.xml----------------------输入法退出弹出
input_method_extract_exit.xml------------------------提取词库移除
input_method_extract_enter.xml------------------------提取词库弹出
input_method_exit.xml--------------------------------输入法面板移除
input_method_enter.xml-----------------------------输-入法面板弹出
grow_fade_in_from_bottom.xml---------------------底部超出渐变
grow_fade_in_center.xml---------------------------中部进入渐变
grow_fade_in.xml-----------------------------------超出渐变
fade_out.xml-------------------------------------最近任务移除
fade_in.xml--------------------------------------最近任务弹出
dialog_exit.xml------------------------------------窗口移除
dialog_enter.xml---------------------------------窗口弹出
decelerate_interpolator.xml----------------------加速插补
cycle_interpolator.xml-----------------------多次加速插补
bounce_interpolator.xml-----------------------反弹插补
app_starting_exit.xml--------------------------运行程序移除
anticipate_overshoot_interpolator.xml---------------预先加速
anticipate_interpolator.xml---------------------------预先加速
alert_dialog_exit.xml----------------------------------提示对话框移除
alert_dialog_enter.xml--------------------------------提示对话框弹出
activity_open_exit.xml------------------------------退出多级菜单移除
activity_open_enter.xml-------------------------------退出多级菜单弹出
activity_close_exit.xml-------------------进入多级菜单移除
activity_close_enter.xml----------------------进入多级菜单弹出
accelerate_interpolator.xml-----------------------动画加速
accelerate_decelerate_interpolator.xml----------------动画加速后减速
frameworks\base\core\res\res\anim 动画特效
frameworks\base\core\res\res\animator 动画绘制
frameworks\base\core\res\res\color 颜色模式
frameworks\base\core\res\res\drawable
frameworks\base\core\res\res\layout 布局配置
frameworks\base\core\res\res\interpolator 动画播放速度
framework-res 字符串的添加
在framework-res中添加字符串test_string,修改以下文件:
frameworks/base/core/res/res/values/public.xml
frameworks/base/core/res/res/values/strings.xml
编译(mmm framework/base/core/res -B),之后检验是否将test_string添加到了R.java,查看:
out/target/common/R/com/android/internal/R.java
out/target/common/R/android/R.java
test_string已经被生成为R.string类中的成员变量,说明添加成功。
然后在PhoneWindowManager中引用com.android.internal.R.string.test_string,编译(mmm framework/base/policy),报找不到符号的错误。
尝试更新api声明(make update-api),./frameworks/base/api/current.txt 被重新生成。再编译policy,通过。
查看./frameworks/base/api/current.txt, public static final class R.string中自动生成了:
public static final class R.string {
ctor public R.string();
//....
field public static final int test_string = 17039392; // 0x1040020
//...
}
make update-api更新的是公共api,如果仅添加framework内部使用的api、资源,应该没有必要每次都update-api,说明资源的添加方法还是有问题。
经查证,大部分字符串没有在public.xml中声明,而是在./frameworks/base/core/res/res/values/symbols.xml中被声明。而symbols中声明的字符串ID没有在current.txt中找到,应该是framework内部使用的非公共资源。 因此,在framework中添加一个内部使用的字符串,仅需修改:
frameworks/base/core/res/res/values/symbols.xml
frameworks/base/core/res/res/values/strings.xml
而添加一个所有应用程序都可以调用到的字符串资源,则需要修改:
frameworks/base/core/res/res/values/public.xml
frameworks/base/core/res/res/values/strings.xml
另外需要注意的是,修改xml后最好强制重新编译framework-res(mmm framework/base/core/res -B),以免出现R.java没有重新生成的问题。
查找framework-res.apk : find $ANDROID_BUILD_TOP -name "*.mk" |xargs -i grep -rwnH "framework-res" {} // 找到framework-res.apk所在目录