MID內建APK教程
By YWW
首先申明,這裡的方法介紹是針對我司自己項目中的具體開發板而做的。
Mg701內建APK有三種方式
一、 這種方法必須要自己編寫Android.mk檔案(關於Android.mk可以參考),在研發中,自己有源碼時,可以將APK的源碼包置於Android源碼中(比如:alps/package/apps中),然後需要編寫Android.mk檔案。然後執行命令:
./makeMtk <project_name> remake android <module_name>
二、 使用這種方法,會將此APK加入到編譯系統。當使用new時,此APK仍然會編譯到系統中。具體步驟為:
1. 在alps/packages/apps/下建立一個目錄,假定為Test。
2. 將###.apk(需要內建的apk)改名為Test.apk並放置在第一步建立的Test目錄下。
3. 請將以下內容複寫並儲存為Android.mk ,同樣放在Test目錄下
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := user
LOCAL_PREBUILT_PACKAGE := $(LOCAL_PATH)/Test.apk
LOCAL_PACKAGE_NAME := Test
LOCAL_CERTIFICATE := platform
include $(PREBUILT_PACKAGE)
注意:
要想使用者能卸載內建的apk,請在Android.mk檔案中把變數值
LOCAL_MODULE_TAGS由user改為tests
4. 在alps/build/target/product/<project_name>.mk檔案中的PRODUCT_PACKAGES這一項添加一行Test
5. 將從###.apk解壓出來的庫###.so拷到
alps/vendor/mediatek/<project_name>/artifacts/out/target/product/<project_name>/system/lib/目錄下(無so庫的apk內建時,去掉此步驟)。
6. 在alps目錄下執行
./mk <project_name> remake android。
特別注意:依照上述步驟製作,在編譯時間會出現錯誤而停止編譯,這主要是LOCAL_MODULE_TAGS := user而引起的。
LOCAL_MODULE_TAGS :=user eng tests optional
user: 指該模組只在user版本下才編譯
eng: 指該模組只在eng版本下才編譯
tests: 指該模組只在tests版本下才編譯
optional:指該模組在所有版本下都編譯
所以將以上Android.mk中的user改為test或者potional都可以,至於user版本的編譯是指在發布版中。我們這裡的發布版的編譯命令是:./makeMtk -opt=TARGET_BUILD_VARIANT=user yecon73v1 new
三、使用這種方法,僅僅操作out目錄下的檔案,來將APK和so檔案打包到Image中,所以不會影響工程的源碼或編譯系統。但是當重新new時,新系統中不會有此APK。
1.(假定處於alps根目錄下)執行命令:source ./build/envstup.sh
2. 執行命令:
export TARGET_PRODUCT=<project_name>
3. 手動將so檔案拷貝到(無so庫的apk內建時,去掉此步驟)
cp ###.so alps/out/product/<project_name>/system/lib/
4. 將APK檔案拷貝到
cp ###.apk alps/out/product/<project_name>/system/app/
5. (假定處於alps根目錄下)執行命令:
make snod(或者m snod命令)