Android Android.mk

 





前几日,涉及到了JNI操作,遇到了一个很大的问题,然后用了很多时间,总算解决了是因为我对工作机制不熟悉,很多原理性的东西,在有的时候是真的很重要的,有的时候就差一个点,就能浪费很多时间弄懂。

Android.mk文件的几个配置项,具体可以百度一下,看不懂的时候感觉很难,看差不多的时候就感觉还好,还好~

1.LOCAL_CERTIFICATE := platform
这个说明是用系统签名,具有系统权限,我之前做一个功能,设置系统默认应用程序就需要这个系统签名

2.LOCAL_PRODUCT_AAPT_CONFIG := xhdpi
这个没找到是干嘛的?看命名应该是需要优化的资源文件夹,还请知道的朋友指点一下~

3. LOCAL_MODULE_PATH   := $(TARGET_OUT_DATA_XXX)/preinstall_apps
程序编译完之后的放置路径,可以把很多个应用都放在这个preinstall_apps路径下,适合做软件的预装

4. LOCAL_DEX_PREOPT := ture
编译后是否生成odex,对于这个odex,我的理解是apk生成的适合在Android Dalvik虚拟机中执行的dex文件,其实就是类文件,对于系统应用来说,通过adb shell 去系统的system/app下可以看到,每个apk都对应一个.apk文件和.odex文件。至于第三方应用,通过install安装的,见:

  1). 先把apk拷贝到/data/app下, 没错,就是完整的apk, 例如com.calendar.UI-2.apk

  2). 解压apk,把其中的classes.dex 拷贝到/data/dalvik-cache, 其命名规则是 apk路径+classes.dex, 如: data@app@com.calendar.UI-2.apk@classes.dex, 其中@表示目录符号/


5.在系统其它应用中看到这个定义:

LOCAL_OVERRIDES_PACKAGES := XXXHome

我的理解是覆盖原生的Luncher2,后来查了了下,果然是,Android不但支持资源的overlay,Java文件的overlay,还支持整个工程的overlay,太强大了。

http://blog.csdn.net/mirkerson/article/details/18840383

http://www.360doc.com/content/12/1206/21/9171956_252560847.shtml



Android.mk内的变量定义
3.1  LOCAL_PATH:  一个Android.mk file首先必须定义好LOCAL_PATH变量。它用于在开发树中查找源文件。例如:
1.LOCAL_PATH:= $(call my-dir)
宏函数’my-dir’, 由编译系统提供,用于返回当前路径(即包含Android.mk file文件的目录)
    
3.2 include $( CLEAR_VARS)
宏CLEAR_VARS 由编译系统提供,指定让GNU MAKEFILE为你清除许多LOCAL_XXX变量(例如 LOCAL_MODULE, LOCAL_SRC_FILES,LOCAL_STATIC_LIBRARIES, 等等...),除LOCAL_PATH 。这是必要的,因为所有的编译控制文件都在同一个GNU MAKE执行环境中,所有的变量都是全局的。
 
3.3 LOCAL_SRC_FILES
本次需要编译的源文件
    
3.4 LOCAL_SHARED_LIBRARIES
本次编译需要链接的动态链接库文件,即.so文件
    
3.5 LOCAL_STATIC_LIBRARIES
静态链接库.
    
3.6 LOCAL_C_INCLUDES
本次编译需要包含的头文件,一个相对于当前目录可选的路径名单,当编译所有的源文件(C,C++和汇编)时,它将被添加进include搜索路径。例如:  LOCAL_C_INCLUDES := sources/foo
或者甚至: LOCAL_C_INCLUDES := $(LOCAL_PATH)/../foo
    
3.6 LOCAL_LDLIBS
本次编译的链接选项,相当于gcc -l后的参数

3.7  LOCAL_CFLAGS
同样是编译选项,相当于gcc -O后面的参数
    
3.8 LOCAL_MODULE
生成的模块名,这个变量必须定义,表示make后将要生成的文件的名字
    
3.9 LOCAL_PACKAGE_NAME
apk文件名

3.10 LOCAL_MODULE_TAGS :=user eng tests optional---->注意这个,我一直没搞明白,现在终于懂了
user: 指该模块只在user版本下才编译
eng: 指该模块只在eng版本下才编译
tests: 指该模块只在tests版本下才编译
optional:指该模块在所有版本下都编译

4. include
include可Android多以这样的形式出现,如:include $(CLEAR_VARS),include $(BUILD_SHARED_LIBRARY).其实这个include可以理解成 "执行" 的意思,那么执行什么呢?当然是看后边的宏了.
宏CLEAR_VARS已经在3.2节中介绍过了,表示清除一些变量.
宏BUILD_SHARED_LIBRARY表示生成共享库,即生成.so文件
因此include $(BUILD_SHARED_LIBRARY)就是指定在/ system /lib/目录下生成一个lib$(LOCAL_MOUDULE).so文件,同样类型的宏如下:
CLEAR_VARS                                   清除LOCAL_xxx变量
BUILD_SHARED_LIBRARY                         在/ system /lib/目录下生成lib$(LOCAL_MOUDULE).so文件
BUILD_STATIC_LIBRARY                        在/system/lib/目录下生成lib$(LOCAL_MOUDULE).a文件
BUILD_EXECUTABLE                             在/ system /bin/目录下生成可执行文件
BUILD_PACKAGE  

android.mk中引用第3方 jar包的方法

http://koliy.iteye.com/blog/1407775
http://www.360doc.com/content/12/1206/21/9171956_252558485.shtml


其实还有很多配置项,具体使用的适合就查下资料吧~


示例Android.mk:
 include $(CLEAR_VARS)
 LOCAL_SRC_FILES := $(call all-subdir-java-files)
 LOCAL_PACKAGE_NAME := XXX
 LOCAL_CERTIFICATE := platform
。LOCAL_MODULE_PATH  := $(TARGET_OUT_DATA_XXX)/preinstall_apps
 LOCAL_PRODUCT_AAPT_CONFIG := xhdpi
 LOCAL_DEX_PREOPT := false
 include $(BUILD_PACKAGE)



http://blog.chinaunix.net/uid-20546441-id-372958.html
http://www.bdqn.cn/news/201307/10450.shtml
http://www.cnblogs.com/hnrainll/archive/2012/12/18/2822711.html
http://blog.csdn.net/mawl2002/article/details/6118522
 http://venus585625.iteye.com/blog/1028270

这个网址是刚发现的,有android.mk的说明,非常好了,比如上面说的很多选项,这里就有介绍,其实就是一份文档~
http://www.kandroid.org/online-pdk/guide/build_cookbook.html

-------------------------------------------------------------------------------------------------------------------------------------

2014-4-3号补充:

Android源码系统中有很多每个项目下都有 Android.mk 文件,在 build/core 下还有更多的 *.mk文件,这些其实都是Makefile,我之前不理解,还以为是shell脚本呢,哎呀,无知真可怕~

上大学的时候学过linux的makefile,已经怎么写makefile,但是当时没好好学习,现在已经全忘记了。Android.mk, 从文件名的后缀上就能看出来,一定是makefile文件,用makefile的好处就是可以实现自动编译,因为android涉及到的模块和工程文件实在是太多了,不实现自动化编译简直无法忍受。
 

这里找到的一些介绍Android的build系统的文章,写的都不错,之前完全不理解~现在终于懂点了。。。
http://blog.csdn.net/chief1985/article/details/4699831
http://www.ibm.com/developerworks/cn/opensource/os-cn-android-build/
http://zensheno.blog.51cto.com/2712776/501371
http://heaven.branda.to/~thinker/GinGin_CGI.py/show_id_doc/393
http://blog.csdn.net/andy_android/article/details/6960314
http://www.cnblogs.com/hesiming/archive/2011/03/15/1984444.html
 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值