[置顶] Android资源文件分析
1)修改开机默认壁纸
Android开机默认资源文件为:frameworks/base/core/res/res/values/config.xml
我们找到wallpaper行:
<string name="default_wallpaper_component">@null</string>
系统默认壁纸一般是一张静态图片,这里设置的静态图片为@null空,那么壁纸到底在什么地方设置的呢?
系统是在packages/apps/Launcher2/res 目录下根据配置文件找到静态壁纸进行设置的。
修改静态默认壁纸:
直接替换frameworks/base/core/res/res/drawable-nodpi/目录下的default_wallpaper.jpg文件即可。
最后编译出来的apk文件:out/target/product/xx/system/framework/framework-res.apk
修改动态桌面壁纸:
Android的动态壁纸不是GIF图片,而是一个应用程序apk。其本质是一个Service,这个Service能够被主界面Launcher加载,那么Launcher
又是如何识别这个包含动态壁纸的Service的apk的呢?
例如:packages/wallpapers/PhaseBeam/AndroidManifest.xml
<action Android:name="android.service.wallpaper.WallpaperService" />
这里系统是通过APK的这个action把其当作一个动态墙纸加载进LivePicker列表,然后用户就可以在LivePicker列表里选择自己喜欢的墙纸设置,进而将动态墙纸显示进Launcher的背后。
所以如果需要设置默认墙纸为动态墙纸的话,直接设置上面的frameworks/base/core/res/res/values/config.xml文件:
<string name="default_wallpaper_component">com.android.phasebeam/com.android.phasebeam.PhaseBeamWallpaper</string>
packages/wallpapers/PhaseBeam目录下的AndroidManifes.xml文件中:
这里com.android.phasebeam对应着包名字
com.android.phasebeam.PhaseBeamWallpaper 对应着Service的名字
2)软件设置壁纸:
设置壁纸的方法总结。
壁纸设置方法有三种
第一 通过WallpaperManager方法中的 setBitmap()
第二 通过WallpaperManager方法中的 setResource()
第三 通过ContextWrapper 类中提供的setWallpaper()方法
由于 Activity 继承ContextThemeWrapper ,ContextThemeWrapper继承 ContextWrapper.
1)通过实例化WallpaperManager 类调用单例类中setBitmap()方法。
- WallpaperManager wallpaperManager = WallpaperManager.getInstance(this);
- Resources res = getResources();
- Bitmap bitmap=BitmapFactory.decodeResource(res, getResources().getIdentifier("wallpaper" + imagePosition,"drawable", "com.ch"));
- wallpaperManager.setBitmap(bitmap);
- Toast.makeText(this,"设置成功", Toast.LENGTH_SHORT).show();
WallpaperManager wallpaperManager = WallpaperManager.getInstance(this);
Resources res = getResources();
Bitmap bitmap=BitmapFactory.decodeResource(res, getResources().getIdentifier("wallpaper" + imagePosition, "drawable", "com.ch"));
wallpaperManager.setBitmap(bitmap);
Toast.makeText(this, "设置成功", Toast.LENGTH_SHORT).show();
2)第二 通过WallpaperManager方法中的 setResource()
- WallpaperManager wallpaperManager = WallpaperManager.getInstance(this);
- try {
- wallpaperManager.setResource(getResources().getIdentifier("wallpaper" + imagePosition,"drawable", "com.ch"));
- Toast.makeText(this,"设置成功", Toast.LENGTH_SHORT).show();
- } catch (IOException e) {
- e.printStackTrace();
- }
WallpaperManager wallpaperManager = WallpaperManager.getInstance(this);
try {
wallpaperManager.setResource(getResources().getIdentifier("wallpaper" + imagePosition, "drawable", "com.ch"));
Toast.makeText(this, "设置成功", Toast.LENGTH_SHORT).show();
} catch (IOException e) {
e.printStackTrace();
}
3)第三 通过ContextWrapper 类中提供的setWallpaper()方法
- //重写ContextWrapper中setWallpaper()方法
- public void setWallpaper(InputStream paramInputStream)throws IOException {
- super.setWallpaper(paramInputStream);
- Toast.makeText(this,"设置成功", 1).show();
- }
- //设置壁纸代码
- Resources localResources = getBaseContext().getResources();
- InputStream localInputStream2 = localResources
- .openRawResource(getResources().getIdentifier(
- "wallpaper" + imagePosition, "drawable","com.ch"));
- try {
- setWallpaper(localInputStream2);
- } catch (IOException e) {
- e.printStackTrace();
- }
3)修改默认语言、时区、型号等:
out/target/product/xx/system/build.prop
ro.product.model=G-BOX
ro.product.local.language=zh
ro.product.local.region=BJ
persist.sys.timezone=Asiz/Shanghai
4)修改Android开机的时候应用Logo
源码:system/core/init/init.c
system/core/init/logo.c
init.c文件中:
static int console_init_action(int nargs, char **args)
{
...
if( load_565rle_image(INIT_IMAGE_FILE)) { // INIT_IMAGE_FILE = /initlogo.rle
fd = open("dev/ttyp0", O_WRONLY);
if(fd >= 0) {
const char *msg;
msg = "\n""\n""\n""A N D R O I D";
write(fd, msg, strlen(msg));
close(fd);
}
}
reurn 0; }
这里首先会通过load_565rle_image()函数去打开/initlogo.rle文件,如果打开失败,则直接显示输出ANDROID这个”图像“。
所以这里我们有两种方法修改这个logo,一个是直接修改ANDROID字符串。另外一个是生成initlogo.rle文件
方法1:修改console_init_action函数中ANDROID字符
方法2:制作rle各式图片文件
1) 使用linux下ImageMagick自带命令convert进行raw各式转换
convert -depth 8 android_logo.png rgb:android_logo.raw
2) 进入out/host/linux-x86/bin目录下找到rgb2565可执行文件
3) 将需要转换的raw文件拷贝到同一目录,执行rgb2565 -rle <android_logo.raw> initlogo.rle生成initlogo.rle文件
4)再将initlogog.rle 拷贝到out/target/product/xx/root/initlogo.rle编译生成img镜像文件即可
5)修改Android动态logo
frameworks/base/core/res/assets/images目录下
android-logo-mask.png 和 android-log-shine.png
bootanimation开机动画:
源码frameworks/base/cmds/bootanimation/目录下
[置顶] Android资源文件分析的更多相关文章
- [置顶] [Android源码分析]inquiry result引起的上层变化分析
		在上一篇文章中,我们详细分析了android是如何解析蓝牙反馈上来的搜索到的设备信息,本文将会继续分析这些信息到了上层之后是如何处理. 8.inquiry result引起的上层变化 我们知道inqu ... 
- [置顶] Android安全机制分析
		Android系统是基于Linux内核开发的,因此,Android系统不仅保留和继承了Linux操作系统的安全机制,而且其系统架构的各个层次都有独特的安全特性[2] . 1. Linux内核层安全机制 ... 
- [置顶] Android源码分析-点击事件派发机制
		转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/17339857 概述 一直想写篇关于Android事件派发机制的文章,却一直没 ... 
- Android资源文件简介
		Android资源文件简介 1. Android应用资源的作用 (1) Android项目中文件分类 在Android工程中, 文件主要分为下面几类 : 界面布局文件, Java src源文件, 资源 ... 
- 【转】关于Android资源文件中出现百分号的问题
		关于Android资源文件中出现百分号的问题 分类: Android JAVA2014-08-01 16:53 1345人阅读 评论(0) 收藏 举报 ANDROID格式化资源文件 目录(?)[+ ... 
- ANDROID资源文件【转】
		1. 资源包括:文本字符串.图像和图标.音频文件.视频和其他应用程序使用的组件. 2. 在Android工程中,Android资源文件是同Java类文件分开存储的,大多数常见的资源类型存储在XML ... 
- 【Android 应用开发】Android资源文件 - 使用资源存储字符串 颜色 尺寸 整型 布尔值 数组
		. 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/19913755 . 一. Android资源文件简介 1 ... 
- Android 资源文件命名与使用
		[推荐]资源文件需带模块前缀 [推荐]layout 文件的命名方式 Activity 的 layout 以 module_activity 开头 Fragment 的 layout 以 module_ ... 
- Android资源文件 - 使用资源存储字符串 颜色 尺寸 整型 布尔值 数组
		一. Android资源文件简介 1. Android应用资源的作用 (1) Android项目中文件分类 在Android工程中, 文件主要分为下面几类 : 界面布局文件, Java src源文件, ... 
随机推荐
- 拔一拔 ExtJS 3.4 里你遇到的没遇到的 BUG(1)
			本文从今天开始,我要做的就是不断的更新,不断的披露ExtJS 3.4的BUG并修复它.需要注意的是版本为3.4而不是4.0,因为4.0改动和变化比较大,所以不要对号入座. 嘿嘿,本人不怎么写东西,不过 ... 
- python2.7_1.14_编写一个简单的回显客户端/服务器应用
			1.服务端 server.py # -*- coding: utf-8 -*- import socket import argparse host = 'localhost' data_payloa ... 
- Xcode 那些简单实用的插件推荐
			古人云“工欲善其事必先利其器”,打造一个强大的开发环境,是立即提升自身战斗力的绝佳途径! 晾一下我的武器库,欢迎大家选用:) 全能搜索家CodePilot 2.0 ------------ ... 
- Angular ng-repeat 对象和数组遍历
			直接上代码 <!DOCTYPE html> <html> <head> <meta name="description" content= ... 
- mysql数据库字段区分大小写的设置方法
			alter table t_25_thread_info modify column thread_id varchar(8) character set utf8 collate utf8_bin; 
- 关于mysqli 连接数不能正确释放的解决方案
			/** * 析构函数 */ //解决重复链接的问题 private $db_handler = null; function __destruct() { Log::logWrite($this-&g ... 
- HDU 3613 Best Reward(扩展KMP)
			[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=3613 [题目大意] 一个字符串的价值定义为,当它是一个回文串的时候,价值为每个字符的价值的和,如果 ... 
- C、C++中引用与指针的区别
			1:引用的和指针在概念上的区别 引用是变量的别名,例如 int m; int &n=m; 引用作为一个别名.它在逻辑上不是独立的,它的存在具有依附性,所以引用必须在一开始就被初始化,而且其引用 ... 
- hdoj 2546 饭卡(0-1背包)
			题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2546 思路分析:该问题为0-1背包问题的变形题:问题求余额最少,设开始的余额为V,则求得用V-5可以买 ... 
- Hibernate 配置详解(12) 补充
			hibernate.hbm2ddl.import_files_sql_extractor 这个配置项用于补充这篇文章: http://blog.csdn.net/stefwu/article/deta ... 
