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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

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

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

[复制链接]
发表于 2015-8-21 17:08:04 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 kuiy 于 2015-8-28 16:39 编辑

最近在学习安卓,我所使用的是芯灵思的开发板,核心板是全志的A31S,感觉性能挺好,而且老板还给了很多的资料,而且还带学习的视频,下面是我在学习完第五期之后的一个经验,希望能跟大家分享一下,也希望各位大神能多多的帮助小弟,小弟在此谢过了。有兴趣的朋友可以去芯灵思官网看一下。

这一期我们还是继续来学习Android.mk,下面我们来思考几个问题:

[size=10.5000pt]1.如果说我们一个工程下面有多个源码文件,我们要如何把这些源码文件统一的做个管理,一起来进行编译呢?

[size=10.5000pt]2.我们如何在一个.mk文件中编译多个目标文件?

[size=10.5000pt]3.如何编译生成一个动态库和静态库

我们要将工程下的源码文件添加到变量中,我们有两种形式:

[size=10.5000pt]1.我们要将每一个文件添加到Android.mk(需手动添加),下面我们来做个练习

首先呢,我们需要配置我们的环境变量.build/envsetup.sh,然后选择我们的lunch 19,这个一般都是固定的,我们的源码是在external/test/目录下

图片1.png

然后我们对external/test/做一个编译,这个编译把main.ctest1.c都编译完成了

图片2.png

然后我们来看一下我们的Android.mk   vi external/test/Android.mk

现在呢LOCAL_SRC_FILES包含两个文件,一个是src/main.c一个是src/test1.c ,然后进入我们这个工程cd external/test/然后进入我们的src目录,然后我们将test1.c拷贝到test2.c

图片3.png

我们进入text2.c我们将它改一下,进去之后将call_1(void)改成call_2(void)

现在我们想将test2.c也加入到我们的工程当中,我们找到我们的Android.mk,打开它,将test2.c添加到LOCAL_SRC_FILES

图片4.png

这样我们就完成了main.c test1.c test2.c的修改,然后我们用mm进行编译,这样就把test2.c也进行了编译

图片5.png

如果我们后边还想添加test3.c 或者更多,那么每当我们添加一个文件都需要手工的去修改一下Android.mk,这样就会显得特别不方便,那么现在就会用到我们所说的第二种方式


[size=10.5000pt]2.使用系统提供的函数进行处理

退回到我们的根目录,打开我们的Android.mk   vi external/test/Android.mk

然后我们用sp命令打开build/core/definitions.mk,我们来查找一个all-c

图片6.png 有黄色部分呢就是我们的函数,我们来看一下他所实现的功能,进入我们的LOCAL_PATH,然后找到我们的所有.c文件,这样就能得到当前目录下的所有.c文件,我们再来把我们的代码改一下,首先添加一个变量,LOCAL_C_ALL_FILES,然后我们需要调用一个函数,我们可以根据第一行那个函数调用我们所查找的那个函数,然后我们将我们所查找到的所有.c文件给我们的LOCAL_SRC_FILES

图片7.png

最后我们切到后台用mmm命令进行编译, mmm external/test/  

我们可以看到,我们的main.ctest1.ctest2.c全部进行了编译

图片8.png

下面我们来验证一下我们所做的是否正确

我们将test1.c拷贝到test3.c里面,将test3.c改一下,直接将call_1改成call_3再进行编译

图片9.png

图片10.png

这样就可以直接将test3.c编译进来了,我们就不用去修改我们的Android.mk,这样呢就比我们单个添加方便很多了

下面我们来看一下如何在一个文件中来创建两个目标文件

我们想要创建一个test1,首先打开test文件,将test文件从LOCAL_PATH以下进行拷贝,将test改成test1LOCAL_PATH保持不变

图片11.png

然后我们再来进行编译,mmm external/test/

图片12.png

我们可以看到他生成了一个test1,然后我们使用touch命令把我们的文件都更新一下touch external/test/src/*  然后我们在执行编译命令这样我们就看到生成了两个文件一个test一个test1文件,这就是在一个文件中生成两个目标文件的过程

图片13.png

接下来我们来学习一下如何编译生成动态库和静态库

首先我们先将代码拷贝一份,我们将名字改成libtest ,然后将源文件改成test目录下的src/test1.ctest2.c ,生成目录不变,我们只需要把生成的类型换成BUILE_SHARED_LIBRARY或者BUILD_STATIC_LIBRARY然后我们在进行编译,这样就在目录下生成了我们所需要的动态库或者静态库

图片14.png

图片15.png

上面呢就是我在第五期视频上学到的一些东西,希望对想学安卓的朋友有一定的帮助。

发表于 2015-8-28 16:10:10 | 显示全部楼层
HENXIANGXUEXIDE
 楼主| 发表于 2015-8-28 16:38:44 | 显示全部楼层
回复 2# Antenna629


   行吧
发表于 2015-9-1 12:14:21 | 显示全部楼层
many thanks
发表于 2015-9-7 23:46:13 | 显示全部楼层
谢谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2024-5-12 08:49 , Processed in 0.028596 second(s), 10 queries , Gzip On, Redis On.

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