当前位置:操作系统 > 安卓/Android >>

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()方法。
Java代码 
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(); 
 
[java]  
<span style="font-size:14px">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();</span>  
         2)第二 通过WallpaperManager方法中的 setResource()
Java代码 
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(); 
 
[java]  
<span style="font-size:14px">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();  
}  
</span>  
3)第三 通过ContextWrapper 类中提供的setWallpaper()方法
Java代码 
//重写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文件中:
[html]  
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)
补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,