閱讀825 返回首頁    go 阿裏雲 go 技術社區[雲棲]


如何把應用程序app編譯進android係統

把常用的應用程序編譯到img文件中,就成了係統的一部分,用戶不必自己安裝,當然也卸載不了; 
同時也可以刪減係統自帶的應用程序,精簡係統; 

1.\build\target\product 目錄下generic.mk文件: 
Java代碼  收藏代碼
  1. PRODUCT_PACKAGES := \  
  2.     AccountAndSyncSettings \  
  3.     DeskClock \  
  4.     AlarmProvider \  
  5.     Bluetooth \  
  6.     Calculator \  
  7.     Calendar \  
  8.     Camera \  
  9.     testMid \  
  10.     CertInstaller \  
  11.     DrmProvider \  
  12.     Email \  
  13.     Gallery3D \  
  14.     LatinIME \  
  15.     Launcher2 \  
  16.     Mms \  
  17.     Music \  

我們添加一個testMid \ 應用名稱。 
2.把testMid包放入 
\packages\apps 目錄下,修改android.mk文件。 

Java代碼  收藏代碼
  1. LOCAL_PATH:= $(call my-dir)  
  2. include $(CLEAR_VARS)  
  3. LOCAL_MODULE_TAGS := optional  
  4. LOCAL_SRC_FILES := $(call all-subdir-java-files)  
  5. LOCAL_PACKAGE_NAME := testMid  
  6. LOCAL_CERTIFICATE := platform  
  7.   
  8. include $(BUILD_PACKAGE)  

注:LOCAL_PACKAGE_NAME := testMid (包名必須和generic.mk中添加的相同) 
編譯源碼,可以看到在 
\out\target\product\smdkv210\system\app 
目錄下生存了testMid.apk了。這時system.img也包含了此應用。 
------------------------------------------------------------------- 
特殊情況:有時,應用需要包含jar包,這時的app導入源碼時會出現問題: 
MODULE.TARGET.JAVA_LIBRARIES.libarity already defined by ... stop 

由於 LOCAL_STATIC_JAVA_LIBRARIES := libarity  會引發錯誤信息。 
目前解決方法是: 
\build\core 目錄下修改base_rules.mk 
注釋掉錯誤信息: 

ifdef $(module_id) 
#$(error $(LOCAL_PATH): $(module_id) already defined by $($(module_id))) 
endif 
$(module_id) := $(LOCAL_PATH) 

--重新編譯,這時可以通過了。 

  (2)、刪除原廠(Telchips)帶源碼的應用程序,如DTV_DVBT 
  在/device/telechips/m801/device.mk 
  注釋掉相應語句: 
  # PRODUCT_PACKAGES += \ 
  #    SampleDVBTPlayer \ 
  同時,在/out/target/product/m801/system/app 找到相應的.APK包,並刪除 

最後更新:2017-04-03 12:55:50

  上一篇:go Flume-ng出現HDFS IO error,Callable timed out異常
  下一篇:go Android中內容觀察者的使用---- ContentObserver類詳解