在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
芯片精品文章合集(500篇!)    创芯人才网--重磅上线啦!
查看: 1707|回复: 4

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

[复制链接]
发表于 2015-8-28 16:43:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x

这一期我们继续探索Android.mk ,主要讲的是如何编译jar包,如何编译APKAPK中如何导入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

图片1.png

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

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

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

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

然后我们来编译我们的app ,   mmm pankage/apps/Calculator/

图片2.png

图片3.png

在编译过程中共生成了两个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文件,.dexAndroid系统使用的文件格式,只能在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 :指定编译生成文件类型

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

图片4.png

最后我们看一下如何在Android.mk中添加判断语句

图片5.png

我们找到上一期我们的Android.mk文件,将ifeq的判断语句添加进去

vi external/test/Android.mk

图片6.png

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

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

图片7.png

然后我们进行编译 先来touch src/main.cpp  然后mm


图片8.png

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

图片9.png

我们在这里添加上错误信息,然后编译,看看是在23行出的错还是在25行出的错,执行mm编译命令

图片10.png

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

图片11.png

这就说明当我们使用ifeq时就可以判断我们的编译过程

发表于 2016-2-6 04:55:24 | 显示全部楼层
很好的资料!
发表于 2016-2-19 11:00:03 | 显示全部楼层
谢谢写
发表于 2016-3-6 01:18:55 | 显示全部楼层
thanks thanks
发表于 2016-3-7 17:09:47 | 显示全部楼层
谢谢楼主
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-10 16:36 , Processed in 0.027056 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表