Android資源檔分析

來源:互聯網
上載者:User

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.propro.product.model=G-BOXro.product.local.language=zhro.product.local.region=BJpersist.sys.timezone=Asiz/Shanghai 4)修改Android開機的時候應用Logo源碼:system/core/init/init.c          system/core/init/logo.cinit.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動態logoframeworks/base/core/res/assets/images目錄下        android-logo-mask.png   和 android-log-shine.pngbootanimation開機動畫: 源碼frameworks/base/cmds/bootanimation/目錄下 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.