有語句可以生成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文件的結構。
最後介紹幾個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
目錄下。