Android 预编译模块

来源:互联网 发布:淘宝旺铺智能版好用吗 编辑:程序博客网 时间:2024/06/13 02:39

在实际的开发过程,并不会像Android一样将所有的源码一起编译,有很多的APK、Jar包等都是预先编译好的,编译系统时需要将这些二进制文件复制到生成的image文件中.
常用的方法是通过PRODUCT_COPY_FILES变量将这些文件直接复制生成的image文件中,但是有些APK文件和jar包,需要使用系统的的签名文件才能正常运行,这样复制的方式就不痛了,另外,一些动态库文件可能源码中的某些模块所依赖,用复制的方法无法建立依赖关系,可以用预编译模块的方法解决。
定义一个预编译模块和一个普通的编译模块格式相似,不同的是LOCAL_SRC_FILES变量指定的不是源文件,而是二进制文件的路径,同时还要通过LOCAL_MODULE_CLASS来指定模块的类型,最后include是BUILD_PREBUILT变量定义的编译文件。
下面是常见模块的写法

1.apk文件目标

include $(CLEAR_VARS)LOCAL_MODULE :=ThemeManager.apkLOCAL_SRC_FILES :=app/$(LOCAL_MODULE)LOCAL_MODULE_TAGS :=optionalLOCAL_MODULE_CLASS:=APPS   #这里是APPSLOCAL_CERTIFICATE :=platforminclude $(BUILD_PREBUILT)

2.定义静态jar包目标

include $(CLEAR_VARS)LOCAL_MODULE :=ThemeManager.jarLOCAL_SRC_FILES :=app/$(LOCAL_MODULE)LOCAL_MODULE_TAGS :=optionalLOCAL_MODULE_CLASS:=JAVA_LIBRARIES   #这里是JAVA_LIBRARIESLOCAL_CERTIFICATE :=platforminclude $(BUILD_PREBUILT)

3.定义动态库文件目标

include $(CLEAR_VARS)LOCAL_MODULE :=ThemeManager_jni.soLOCAL_MODULE_OWER :=LOCAL_SRC_FILES :=lib/$(LOCAL_MODULE)LOCAL_MODULE_TAGS :=optionalLOCAL_MODULE_CLASS:=SHARED_LIBRARIES   #这里是SHARED_LIBRARIESinclude $(BUILD_PREBUILT)

4.定义可执行文件目标

include $(CLEAR_VARS)LOCAL_MODULE :=bootanimationLOCAL_MODULE_OWER :=LOCAL_SRC_FILES :=bin/bootanimationLOCAL_MODULE_TAGS :=optionalLOCAL_MODULE_CLASS :=EXECUTABLES   #这里是EXECUTABLESLOCAL_MODULE_PATH :=$(TARGET_OUT)/bin  #这里可以指定复制到的目标目录include $(BUILD_PREBUILT)

5.定义xml文件目标

include $(CLEAR_VARS)LOCAL_MODULE :=ThemeManager.xmlLOCAL_MODULE_OWER :=LOCAL_SRC_FILES :=etc/$(LOCAL_MODULE)LOCAL_MODULE_TAGS :=optionalLOCAL_MODULE_CLASS:=ETC   #ETC表示文件将复制到/system/etc下include $(BUILD_PREBUILT)

6.定义host平台下的jar包
将系统编译时用到的sigapk.jar预编译,然后复制到out目录下,这样Build系统将能够使用这个文件来给其他文件签名:

include $(CLEAR_VARS)LOCAL_MODULE :=signapkLOCAL_PREBUILT_JAVA_LIBRARIES :=lib/$(LOCAL_MODULE).jarinclude $(BUILD_HOST_PREBUILT)
原创粉丝点击