Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android資源文件分析

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) 使用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/目錄下  
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved