Android.mk入門

有語句可以生成out/target/common/obj/JAVA_LIBRARIES/dom4j-1.6.1_intermediates/classes.jack'這個target。

所以這裏就需要修改makefile來解決這個問題。 
修改如下:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES :=$(call all-subdir-java-files)
LOCAL_JAVA_LIBRARIES := framework 
LOCAL_STATIC_JAVA_LIBRARIES := dom4j-1.6
LOCAL_PACKAGE_NAME := MakefileDemo
LOCAL_MODULE_TAGS := optional
LOCAL_CERTIFICATE := platform
include $(BUILD_PACKAGE)

include $(CLEAR_VARS)  
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := dom4j-1.6.1:libs/dom4j-1.6.1.jar
include $(BUILD_MULTI_PREBUILT) 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES變量指定了需要進行預編譯的庫,指定的語法是靜態庫別名:靜態庫所在文件夾例如dom4j-1.6.1:libs/dom4j-1.6.1.jar

再次build一次看下log,成功了:

Install: out/target/product/XXX/system/app/MakefileDemo/MakefileDemo.apk
target Prebuilt: dom4j-1.6.1 (out/target/common/obj/JAVA_LIBRARIES/dom4j-1.6.1_intermediates/classes.jar)
target Prebuilt: dom4j-1.6.1 (out/target/common/obj/JAVA_LIBRARIES/dom4j-1.6.1_intermediates/javalib.jar)
target Prebuilt: dom4j-1.6.1 (out/target/product/XXXX/obj/JAVA_LIBRARIES/dom4j-1.6.1_intermediates/javalib.jar)
make: Leaving directory `/home/yuanjize/android'
#### make completed successfully (6 seconds) ####
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

打開上面生成的jar包可以發現都是dom4j-1.6.1的代碼,BUILD_MULTI_PREBUILT只是改了個名字,至於classes.jack文件是Android 6.0最新的編譯工具,感興趣可以搜索一下。

到了這裏已經可以完美的編譯這個apk了。

總結一下這個mk文件的結構。

Start設置LOCAL_PATH清除除了LOCAL_PATH以外的所有LOCAL_PATH變量指定MODULE_TAGS指定要編譯的源碼目錄指定模塊或者apk名稱是否編譯成apk?指定簽名指定build腳本是否引入外部靜態庫?使用BUILD_MULTI_PREBUILT腳本來處理靜態庫?Endyesnoyesno
最後介紹幾個BUILD_XXXX腳本

我們這裏使用的BUILD腳本是BUILD_PACKAGE作用是把這個模塊編譯成一個apk,下面的表格介紹了一些build腳本和對應的功能。

腳本 公能
BUILD_PACKAGE 編譯成apk
BUILD_JAVA_LIBRARY 編譯成動態JAVA庫
BUILD_STATIC_JAVA_LIBRARY 編譯成靜態JAVA庫
BUILD_MULTI_PREBUILT 定義瞭如何處理一個或多個已編譯文件(拷貝操作)
BUILD_PREBUILT 定義瞭如何處理一個已編譯文件(拷貝操作,只能copy一個)
BUILD_STATIC_LIBRARY 編譯c/c++靜態庫
BUILD_SHARED_LIBRARY 編譯c/c++共享庫(.so文件)
BUILD_EXECUTABLE 編譯成可執行程序

使用Build腳本生成的模塊都在:

out/target/common/obj/
out/target/product/定製版本/obj/
  • 1
  • 2
  • 3

這兩個目錄下。 
生成的apk在 
out/target/product/定製版本/system/app/app名稱/這個目錄。

Build腳本的名字都是把宏的BUILD_前綴去掉,例如BUILD_EXECUTABLE的教本文件名字就是EXECUTABLE.mk,所有的腳本都在build/core目錄下。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章