xiaohai8856 发表于 2015-8-28 15:56

芯灵思开发板安卓底层开发学习经验第七期

这一期我们继续探索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 := LocalPackageinclude $(BUILD_PACKAGE)BUILD_PACKAGE :编译生成apkLOCAL_PACKAGE_NAME :编译生成apk的名字下面我来给大家演示一个如何生成apk的小例子:首先我们需要配置我们的环境变量. build/envsetup.sh , 然后选择我们的lunch,我们来那我们的原生系统应用来举个例子,我们来看一下pankage/apps/下都有哪些原生应用         lspankage/apps/然后我们来看一下这个Calculator的代码 vi pankage/apps/Calculator/Android.mkLOCAL_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.myjarinclude $(BUILD_STATIC_JAVA_LIBRARY)include $(BUILD_JAVA_LIBRARY)include $(BUILD_STATIC_JAVA_LIBRARY) : 编译生成静态jar包include $(BUILD_JAVA_LIBRARY) : 编译生成共享jar包我们来看一下jar包的分类:(1)静态jar包:include $(BUILD_STATIC_JAVA_LIBRARY) 使用.class文件打包而成的JAR文件,可以在任何java虚拟机运行(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 := LocalPackageinclude $(BUILD_PACKAGE)预编译jar包:LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE_CLASS := JAVA_LIBRARIESLOCAL_MODULE := com.test.shareLOCAL_SRC_FILES := com.test.staticinclude $(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时就可以判断我们的编译过程
页: [1]
查看完整版本: 芯灵思开发板安卓底层开发学习经验第七期