在原生的Android系統(2.3.4)中,實際上已經有Livewallpapers的相關代碼,只是Android默認沒有將其編譯進去,所以增加對LiveWallpapers的支持,只需要將其編譯進Android就可以了。
Livewallpapers相關的代碼位置如下:
android\packages\wallpapers\Basic:主要是編譯為LiveWallpapers的package,內部有很多自帶的LiveWallpaers的APK
android\packages\wallpapers\LivePicker:主要是編譯為LiveWallpapersPicker的package
android\packages\wallpapers\MagicSmoke:主要是編譯為MagicSmokeWallpapers的package,也就是一個MagicSmoke的LiveWallpapers
android\packages\wallpapers\MusicVisualization:主要是編譯為VisualizationWallpapers的package,也是一個自帶的LiveWallpapers的
1. 如何編譯進Android的源代碼呢?
由於我的是自己的mk文件,所以不具有參考性,所以你找一個你確定能編譯進源碼的mk文件,在其中加入:
PRODUCT_PACKAGES += \
LiveWallpapers \
LiveWallpapersPicker \
MagicSmokeWallpapers \
VisualizationWallpapers \
2. 底層庫的支持:
將以上package編入系統後,還需要一些底層庫的支持,其實主要是RenderScript的支持,(livewallpapers的實現就是使用google的RenderScript)
主要需要兩個庫的支持:libRS和librs_jni
android的代碼中也有,也是沒有編譯進來,在
/android/build/target/product/core.mk中的PRODUCT_PACKAGES後加入編譯選項。(或許步驟1下的編譯選項也能加到這個mk文件中,沒有試過)
libRS \
librs_jni \
OK,android的LiveWallpaers的支持已經完成,不過我在跑自帶的LiveWallpaers老是遇到NullPointerException的問題:
這個問題的主要是一些資源文件找不到,我的做法是將步驟1中的PACKAGE中的一些放在/res目錄下的資源文件:如drawable-hdpi或drawable-nodpi下面的一些圖片放在drawable下就可以了。