Android.mk  ,主要讲的是如何编译 jar 包,如何编译 APK , APK 中如何导入 jar 包和库文件,如何在 Android.mk 中添加判断语句


APK,


APK 的主要程序代码:


LOCAL_PATH := $(call my-dir)


include $(CLEAR_VARS)


LOCAL_SRC_FILES := $(call all-subdir-java-files)


LOCAL_PACKAGE_NAME := LocalPackage


include $(BUILD_PACKAGE)


:编译生成 apk


:编译生成 apk 的名字


apk 的小例子:


. build/envsetup.sh  , 然后选择我们的 lunch ,我们来那我们的原生系统应用来举个例子,我们来看一下 pankage/apps/ 下都有哪些原生应用            ls  pankage/apps/   然后我们来看一下这个 Calculator 的代码


vi pankage/apps/Calculator/Android.mk




安卓 UDF架构_jar



就是调用我们当前目录下的所有 java 的文件


指定的是我们当前 SDK 的版本


下面我们来编译一下这个文件,首先我们需要更新一下我们的原文件下的任何一个文件


Touch pankage/apps/Calculator/src/com/android/calculator2/Calculator.java


app ,   mmm pankage/apps/Calculator/



安卓 UDF架构_jar_02




安卓 UDF架构_jar_03



apk 文件,这就是如何生成 apk 文件


jar 包


jar 包需要的代码:


LOCAL_PATH := $(call my-dir)


include $(CLEAR_VARS)


LOCAL_SRC_FILES := $(call all-subdir-java-files)


LOCAL MODULE := com.test.myjar


include $(BUILD_STATIC_JAVA_LIBRARY)


include $(BUILD_JAVA_LIBRARY)


编译生成静态 jar 包


: 编译生成共享 jar 包


jar 包的分类:


[size=10.5000pt](1)静态 jar 包: include $(BUILD_STATIC_JAVA_LIBRARY)  使用 .class 文件打包而成的 JAR 文件,可以在任何 java 虚拟机运行


[size=10.5000pt](2)动态 jar 包: include $(BUILD_JAVA_LIBRARY)   在静态 jar 包基础之上使用 .dex 打包而成的 jar 文件, .dex 是 Android 系统使用的文件格式,只能在 Android 上使用


apk 中引用我们的 jar 包 ;


LOCAL_PATH := $(call my-dir)


include $(CLEAR_VARS)


静态 jaeger 包 )


(动态 jar 包)


LOCAL_SRC_FILES :=$(call all-subdir-java-files)


LOCAL_PACKAGE_NAME := LocalPackage


include $(BUILD_PACKAGE)


jar 包:


LOCAL_PATH := $(call my-dir)


include $(CLEAR_VARS)


LOCAL_MODULE_CLASS := JAVA_LIBRARIES


LOCAL_MODULE := com.test.share


LOCAL_SRC_FILES := com.test.static


include $(BUILD_PREBUILT)


:预编译


:指定编译生成文件类型


下面我们来看一下预编译生成文件的类型



安卓 UDF架构_Android_04



Android.mk 中添加判断语句



安卓 UDF架构_jar_05



文件,将 ifeq 的判断语句添加进去


vi external/test/Android.mk



安卓 UDF架构_安卓 UDF架构_06



当时呢,我们在这里尝试了两种方式,现在我们通过判断的方式来确定使用哪种方式


下面我们将判断的语句添加进去



安卓 UDF架构_jar_07



touch src/main.cpp   然后 mm




安卓 UDF架构_jar_08



这样虽然编译通过了,但是我们不知道编译的是静态库还是动态库,我们再来添加点错误代码来看一下,



安卓 UDF架构_JAVA_09



行出的错还是在 25 行出的错,执行 mm 编译命令



安卓 UDF架构_安卓 UDF架构_10


行出的错,所以当我们的 USED_SHARE=true 的话,我们程序走的就是动态库,然后我们将 true 改成 false ,我们再来执行编译  mm



安卓 UDF架构_安卓 UDF架构_11



ifeq 时就可以判断我们的编译过程