Android系統整合第三方pre-build庫和程式

來源:互聯網
上載者:User

       對於Android系統整合有源碼的第三方庫和程式,只需要提供Android.mk檔案,把源碼整合到 Android編譯系統中就可以了,並且有很多例子可以參考。但是對於沒有源碼的pre-build第三方庫和程式,網上介紹的比較少,可以參考的例子也不多。本文簡單介紹一下整合pre-build庫和程式時候,怎樣編寫Android.mk。

1、整合靜態庫

1: LOCAL_PATH := $(call my-dir)<br /> 2: include $(CLEAR_VARS)<br /> 3:<br /> 4: LOCAL_PREBUILT_LIBS := libA.a /<br /> 5: libB.a<br /> 6:<br /> 7: LOCAL_STATIC_LIBRARIES := libA /<br /> 8: libB<br /> 9:<br /> 10: include $(BUILD_MULTI_PREBUILT)



2、整合動態庫


1: LOCAL_PATH := $(call my-dir)<br /> 2: include $(CLEAR_VARS)<br /> 3:<br /> 4: LOCAL_PREBUILT_LIBS := libA.so<br /> 5: libB.so<br /> 6: include $(BUILD_MULTI_PREBUILT)


3、整合可執行程式

1: LOCAL_PATH := $(call my-dir)<br /> 2: include $(CLEAR_VARS)<br /> 3:<br /> 4: LOCAL_SRC_FILES := hellovprc.elf<br /> 5: LOCAL_MODULE := hellovprc.elf<br /> 6: LOCAL_MODULE_CLASS := EXECUTABLES<br /> 7: LOCAL_MODULE_TAGS := debug<br /> 8: include $(BUILD_PREBUILT)




4、整合pre-build Android應用程式(APK)


如何整合沒有源碼的apk檔案,純粹的apk呢?

方法一、目錄結構vendor/BM/APPs/MobileQQ2011/MobileQQ2011.apk

            vendor/BM/APPs/MobileQQ2011/Android.mk

以下是Android.mk:

 

LOCAL_PATH := $(call my-dir)<br /> include $(CLEAR_VARS)</p><p> # Module name should match apk name to be installed.<br /> LOCAL_MODULE := MobileQQ2011<br /> LOCAL_SRC_FILES := $(LOCAL_MODULE).apk<br /> LOCAL_MODULE_CLASS := APPS<br /> LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)</p><p># LOCAL_MODULE_TAGS := user<br />#add by yue @20110516<br /> #you can choose apk's diff location<br /> # LOCAL_MODULE_PATH := $(TARGET_OUT_APPS)<br /> LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)<br /> LOCAL_CERTIFICATE := platform<br />#end<br /> include $(BUILD_PREBUILT)

 

加進去後,在根目錄下執行:make即可,

可以在installed-files.txt中查看是否加入到了對應的img檔案中。

 弊端是如果加入很多apk,要逐個建立這樣的目錄結構,也因為有android.mk,會產生相應的臨時檔案

方法二、純粹拷貝apk檔案

目錄結構vendor/BM/APPs/MobileQQ2011.apk

            vendor/BM/APPs/Renren_Android_3.0.2.apk

             。。。。。

通過android提供的PRODUCT_COPY_FILES這個變數來自動拷貝,只需要給此變數賦值。在任何一個確定加入編譯的mk檔案

中加入(我的是加在msm7627_qrd.mk)

PRODUCT_COPY_FILES += /

    vendor/bm/APPS/MobileQQ2011.apk:system/app/MobileQQ2011.apk/
    vendor/bm/APPS/Renren_Android_3.0.2.apk:system/app/Renren_Android_3.0.2.apk

這種相對不會很繁瑣,不需要一級級的建立目錄,在內建很多apk是比較方便。

 

附加說明:


關於android.mk中的LOCAL_OVERRIDES_PACKAGES需要說明一下,

此變數可以使其他的模組不加入編譯,如源碼中DeskClock的android.mk有

LOCAL_OVERRIDES_PACKAGES := AlarmClock

使
AlarmClock不會加入到編譯系統中,不會產生
AlarmClock.apk。

原先我是死活不明白會什麼有兩個鬧鐘
AlarmClock和
DeskClock
,源碼幾乎相同,原先只在
AlarmClock中的檔案中修改,就是沒有效果,測試說沒有修改,原來發布的版本中只有DeckClock.apk,我卻在本地make AlarmClock編譯出了AlarmClock.apk,>_<!!

試了一下在
DeskClock的android.mk中加入LOCAL_OVERRIDES_PACKAGES := Calendar,刪掉
Calendar.apk,
然後全部make一下,在system/app下calendar.apk竟然沒再產生了????!!!

p.s

# Some packages may override others using LOCAL_OVERRIDES_PACKAGES.
# Filter out (do not install) any overridden packages.
overridden_packages := $(call get-package-overrides,$(modules_to_install))
ifdef overridden_packages
#  old_modules_to_install := $(modules_to_install)
  modules_to_install := /
      $(filter-out $(foreach p,$(overridden_packages),$(p) %/$(p).apk), /
          $(modules_to_install))
endif





其他參考:

1.對Android.mk檔案中變數做了詳細說明

    http://www.cnblogs.com/leaven/archive/2011/03/30/1999350.html

2. Android.mk檔案文法規範

   http://apps.hi.baidu.com/share/detail/15447104

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.