这一期我们继续探索
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)
BUILD_PACKAGE
:编译生成
apk
LOCAL_PACKAGE_NAME
:编译生成
apk
的名字
下面我来给大家演示一个如何生成
apk
的小例子:
首先我们需要配置我们的环境变量
. build/envsetup.sh
, 然后选择我们的
lunch
,我们来那我们的原生系统应用来举个例子,我们来看一下
pankage/apps/
下都有哪些原生应用
ls pankage/apps/
然后我们来看一下这个
Calculator
的代码
vi pankage/apps/Calculator/Android.mk
LOCAL_SRC_FILES
就是调用我们当前目录下的所有
java
的文件
LOCAL_SDK_VERSION
指定的是我们当前
SDK
的版本
下面我们来编译一下这个文件,首先我们需要更新一下我们的原文件下的任何一个文件
Touch pankage/apps/Calculator/src/com/android/calculator2/Calculator.java
然后我们来编译我们的
app , mmm pankage/apps/Calculator/
在编译过程中共生成了两个
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)
include $(BUILD_STATIC_JAVA_LIBRARY) :
编译生成静态
jar
包
include $(BUILD_JAVA_LIBRARY)
: 编译生成共享
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)
LOCAL_STATIC_JAVA_LIBRARIES := statia-library (
静态
jaeger
包
)
LOCAL_JAVA_LIBRARIES := share-library
(动态
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)
BUILD_PREBUILT
:预编译
LOCAL_MODULE_CLASS
:指定编译生成文件类型
下面我们来看一下预编译生成文件的类型
最后我们看一下如何在
Android.mk
中添加判断语句
我们找到上一期我们的Android.mk
文件,将
ifeq
的判断语句添加进去
vi external/test/Android.mk
当时呢,我们在这里尝试了两种方式,现在我们通过判断的方式来确定使用哪种方式
下面我们将判断的语句添加进去
然后我们进行编译 先来
touch src/main.cpp
然后
mm
这样虽然编译通过了,但是我们不知道编译的是静态库还是动态库,我们再来添加点错误代码来看一下,
我们在这里添加上错误信息,然后编译,看看是在23
行出的错还是在
25
行出的错,执行
mm
编译命令
可以看到是在23
行出的错,所以当我们的
USED_SHARE=true
的话,我们程序走的就是动态库,然后我们将
true
改成
false
,我们再来执行编译
mm
这就说明当我们使用
ifeq
时就可以判断我们的编译过程