1. 程式人生 > >Android import includes export includes

Android import includes export includes

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

                Android import_includes export_includes
        完整的錯誤:xxx/obj/SHARED_LIBRARIES/yyy_intermediates/import_includes需要的目標xxx/obj/STATIC_LIBRARIES/zzz_intermediates/export_includes

       出現這個問題不是在編譯系統的時候出現的,是在編譯一個應用程式的時候出現的。應用程式A有點特殊,用到了一個靜態庫B.a。直接編譯A會去B的中間目錄$OUT/obj/STATIC_LIBRARIES/B_intermediates/去找export_includes ,這個在升級到android4.2.2的時候遇到的,4.0.3的時候沒有。4.0.3的時候會到$OUT/obj/STATIC_LIBRARIES/B_intermediates/中找B.a,然後我手動將B.a放到裡邊就行了(當時覺得手動放入並不是一個好的方法)。但是現在的4.2.2會先找export_includes,去其他庫目錄中找export_includes會發現其是一個空檔案,於是新建一個空檔案命名為export_includes後和B.a一同放入$OUT/obj/STATIC_LIBRARIES/B_intermediates/程式A編譯連結成功。

        手動放入$OUT目錄檔案不是一個好的方法,趁此機會要解決這個問題。找了一下Android對於這種已經存在的庫的處理方法是在新建立一個lib目錄,其中建立一個Android.mk內容如下:
LOCAL_PATH := $(call my-dir) $(call add-prebuilt-files, STATIC_LIBRARIES, B.a)
(關於add-prebuilt-files的更多使用看參考文件)
將B.a和這個Android.mk一起放入到新建的lib目錄。在其中執行mm。可以發現會自動將當前目錄下的B.a拷貝到$OUT/obj/STATIC_LIBRARIES/B_intermediates/並生成了需要的export_includes。
再編譯A程式可以無誤的連結了。為了把B.a和A程式放到一起可以這個lib目錄和A程式所在的A目錄一起放到新的A_zong目錄。在A_zong中新建一個Android.mk內容如下:
include $(call all-subdir-makefiles)

A_zong下的目錄結構是這樣的: ├── Android.mk ├── lib │   ├── Android.mk │   └── B.a └── A     ├── Android.mk     ├── a.c   └── a.h 這樣就可以當成一個普通的程式放到原始碼的app原始碼位置,整體編譯的時候會自動編譯A_zong.            

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述