编译

本文介绍了如何利用CCCache工具提升编译速度,通过设置环境变量和配置,可以显著加快编译过程。同时,文章提供了编译模拟器、模块编译的具体步骤,包括设置LOCAL_PATH、指定依赖库和模块类型等,适用于Android开发者的效率提升。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CCCache 提高编译速度

#export USE_CCCache = 1

#export CCCACHE_DIR = /<path_of_your_choice>/.cccache

#prebuilts/misc/linux-x86/cccache/cccache -M 50G


模拟器编译:

. build/envsetup.sh

lunch sdk-eng

make

emulator

启动模拟器前,先运行下intelhaxm可执行文件,会提高模拟器运行速度


模块编译:

#设置LOCAL_PATH为当前目录

LOCAL_PATH:= $(call my-dir)

#清空除LOCAL_PATH外所有的LOCAL_变量
include $(CLEAR_VARS)


LOCAL_SRC_FILES := \
        $(call all-logtags-files-under, src)


LOCAL_MODULE := settings-logtags


include $(BUILD_STATIC_JAVA_LIBRARY)


# Build the Settings APK
include $(CLEAR_VARS)

#指定依赖的共享java类库
LOCAL_JAVA_LIBRARIES := bouncycastle core-oj telephony-common ims-common telephony-ext

#指定依赖的静态java类库
LOCAL_STATIC_JAVA_LIBRARIES := \
    android-support-v4 \
    android-support-v13 \
    android-support-v7-recyclerview \
    android-support-v7-preference \
    android-support-v7-appcompat \
    android-support-v14-preference \
    jsr305 \
    settings-logtags

#定义模块的标签为optional
LOCAL_MODULE_TAGS := optional

#定义源文件列表
LOCAL_SRC_FILES := \
        $(call all-java-files-under, src) \
        src/com/android/settings/EventLogTags.logtags
LOCAL_SRC_FILES += src/org/codeaurora/wfcservice/IWFCService.aidl \
                   src/org/codeaurora/wfcservice/IWFCServiceCB.aidl


LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res \
    frameworks/support/v7/preference/res \
    frameworks/support/v14/preference/res \
    frameworks/support/v7/appcompat/res \
    frameworks/support/v7/recyclerview/res

#指定模块名称
LOCAL_PACKAGE_NAME := Settings

#指定模块使用platform签名
LOCAL_CERTIFICATE := platform

#4.4新标志,为true表示将此apk安装到priv-app目录下
LOCAL_PRIVILEGED_MODULE := true

#指定混淆的标志
LOCAL_PROGUARD_FLAG_FILES := proguard.flags

#指定AAPT的属性
LOCAL_AAPT_FLAGS := --auto-add-overlay \
    --extra-packages android.support.v7.preference:android.support.v14.preference:android.support.v17.preference:android.support.v7.appcompat:android.support.v7.recyclerview

#指定编译模块的类型为APK,这将包含
include $(BUILD_PACKAGE)

#将源码余下的Android.mk都包含进来
include $(call all-makefiles-under,$(LOCAL_PATH))


常用模块编译实例:

1.编译一个apk文件

#设置LOCAL_PATH为当前目录

LOCAL_PATH:= $(call my-dir)

#清空除LOCAL_PATH外所有的LOCAL_变量
include $(CLEAR_VARS)

#指定依赖的共享java类库
LOCAL_JAVA_LIBRARIES := bouncycastle core-oj telephony-common ims-common telephony-ext

#指定依赖的静态java类库
LOCAL_STATIC_JAVA_LIBRARIES := \
    android-support-v4 

#定义源文件列表
LOCAL_SRC_FILES := \
        $(call all-java-files-under, src)

#定义模块的标签为optional
LOCAL_MODULE_TAGS := optional

#指定模块名称
LOCAL_PACKAGE_NAME := Settings

#指定模块使用platform签名
LOCAL_CERTIFICATE := shared

#指定模块名称
LOCAL_PACKAGE_NAME := Settings

#指定模块使用platform签名
LOCAL_CERTIFICATE := platform

#指定编译模块的类型为APK,这将包含
include $(BUILD_PACKAGE)

2.编译一个java共享库

#设置LOCAL_PATH为当前目录

LOCAL_PATH:= $(call my-dir)

#清空除LOCAL_PATH外所有的LOCAL_变量
include $(CLEAR_VARS)

#定义源文件列表
LOCAL_SRC_FILES := \
        $(call all-java-files-under, src)

#定义模块的标签为optional
LOCAL_MODULE_TAGS := optional

#定义模块的名称

LOCAL_MODULE := javadynamiclib

#指定编译模块的类型为APK,这将包含
include $(BUILD_JAVA_LIBRARY)

3.编译一个java静态库

#设置LOCAL_PATH为当前目录

LOCAL_PATH:= $(call my-dir)

#清空除LOCAL_PATH外所有的LOCAL_变量
include $(CLEAR_VARS)

#定义源文件列表
LOCAL_SRC_FILES := \
        $(call all-java-files-under, src)

#定义模块的名称

LOCAL_MODULE := javastaticlib

#指定编译模块的类型为APK,这将包含
include $(BUILD_STATIC_JAVA_LIBRARY)


4.编译一个java资源包文件,资源包也是一个apk文件,类似framewor_res.apk

#设置LOCAL_PATH为当前目录

LOCAL_PATH:= $(call my-dir)

#清空除LOCAL_PATH外所有的LOCAL_变量
include $(CLEAR_VARS)

#指定依赖的静态java类库
LOCAL_NO_STANDARD_LIBRARIES := true 

#定义模块的标签为user
LOCAL_MODULE_TAGS := user

#指定模块使用platform签名
LOCAL_CERTIFICATE := platform

#定义模块的名称

LOCAL_PACKAGE_NAME := javareslib

#指定AAPT的属性
LOCAL_AAPT_FLAGS :=  -x、

#指定模块的安装路径
LOCAL_MODULE_PATH := $(TARGET_OUT_JAVA_LIBRARIES)

#值为true时,其他的apk模块能引用本模块的资源
LOCAL_EXPORT_PACKAGE_RESOURCES := true

#指定编译模块的类型
include $(BUILD_PACKAGE)

5.编译一个可执行文件

#设置LOCAL_PATH为当前目录

LOCAL_PATH:= $(call my-dir)

#清空除LOCAL_PATH外所有的LOCAL_变量
include $(CLEAR_VARS)

LOCAL_SRC_FILES := service.cpp

#指定模块需要链接的动态库

LOCAL_SHARED_LIBRARIES := libutils libbinder

#指定编译标志

ifeq($(TARGET_OS), linux)

LOCAL_CFLAGS += -DEP_UNIX

endif

#指定编译模块的名称

LOCAL_MODULE := service 

#指定编译模块的类型
include $(BUILD_EXECUTABLE)

6.编译一个native 共享库

#设置LOCAL_PATH为当前目录

LOCAL_PATH:= $(call my-dir)

#清空除LOCAL_PATH外所有的LOCAL_变量
include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := optional

#指定编译模块的名称

LOCAL_MODULE  := libnativedynamic

#指定编译模块的源文件

LOCAL_SRC_FILES := \

nativedynamic.cpp

#指定模块需要链接的动态库

LOCAL_SHARED_LIBRARIES := \

libutils \

libcutils

#指定模块依赖的静态库

LOCAL_STATIC_LIBRARIES := libnativestatic

#指定头文件的查找路径

LOCAL_C_INCLUDES  += \ 

$(JNI_H_INCLUDE) \ 

$(LOCAL_PATH)/ ../include

#定义编译标志

LOCAL_CFLAGS += -O

#指定编译模块的类型
include $(BUILD_SHARED_LIBRARIES)


7.编译一个native静态库

#设置LOCAL_PATH为当前目录

LOCAL_PATH:= $(call my-dir)

#清空除LOCAL_PATH外所有的LOCAL_变量
include $(CLEAR_VARS)

#指定编译模块的标签

LOCAL_MODULE_TAGS := optional

#指定编译模块的名称

LOCAL_MODULE  := libnativedynamic

#指定编译模块的源文件

LOCAL_SRC_FILES := \

nativestatic.cpp

#指定编译标志

LOCAL_C_INCLUDES  += 

LOCAL_CFLAGS += -O

include $(BUILD_STATIC_LIBRARIES)


定义一个预编译模块

定义一个预编译模块和定义一个普通的编译模块格式相似,不同的是LOCAL_SRC_FILES变量指的不是源文件,而是二进制文件的路径,同时还要通过LOCAL_MODULE_CLASS来指定模块的类型,最后include的是BUILD_PREBUILT。

1. 定义apk文件目标

include $(CLEAR_VARS) 

#这里可以是任何字符串,但必须是唯一的目标

LOCAL_MODULE := ThemeManager.apk

#定义源文件列表
LOCAL_SRC_FILES := app\$(LOCAL_MODULE)

#定义模块的标签为optional
LOCAL_MODULE_TAGS := optional

#这里的值是APPS
LOCAL_MODULE_CLASS := APPS

#指定模块使用platform签名
LOCAL_CERTIFICATE := platform

#指定编译模块的类型为APK,这将包含
include $(BUILD_PREBUILT)

2.定义静态jar包目标

include $(CLEAR_VARS) 

#这里可以是任何字符串,但必须是唯一的目标

LOCAL_MODULE := libfirewall.jar

#定义源文件列表
LOCAL_SRC_FILES := app\$(LOCAL_MODULE)

#定义模块的标签为optional
LOCAL_MODULE_TAGS := optional

#这里的值是JAVA_LIBRARIES
LOCAL_MODULE_CLASS := JAVA_LIBRARIES

#指定模块使用platform签名
LOCAL_CERTIFICATE := platform

#指定编译模块的类型为APK,这将包含
include $(BUILD_PREBUILT)

3.定义动态库文件目标

include $(CLEAR_VARS) 

#这里可以是任何字符串,但必须是唯一的目标

LOCAL_MODULE := libglobaltheme_jni.so

LOCAL_MODULE_OWNER := 

#定义源文件列表
LOCAL_SRC_FILES := lib\$(LOCAL_MODULE)

#定义模块的标签为optional
LOCAL_MODULE_TAGS := optional

#这里的值是JAVA_LIBRARIES
LOCAL_MODULE_CLASS := SHARED_LIBRARIES

#指定编译模块的类型为APK,这将包含

include $(BUILD_PREBUILT)

4. 定义可执行文件目标

include $(CLEAR_VARS) 

#这里可以是任何字符串,但必须是唯一的目标

LOCAL_MODULE := bootanimation

LOCAL_MODULE_OWNER := 

#定义源文件列表
LOCAL_SRC_FILES := bin\bootanimation

#定义模块的标签为optional
LOCAL_MODULE_TAGS := optional

#这里的值是JAVA_LIBRARIES
LOCAL_MODULE_CLASS := EXECUTABLE

#还可以指定复制到的目录

LOCAL_MODULE_PATH := $(TARGET_OUT)/bin

#指定编译模块的类型为APK,这将包含

include $(BUILD_PREBUILT)

5. 定义xml 文件目标

include $(CLEAR_VARS) 

#这里可以是任何字符串,但必须是唯一的目标

LOCAL_MODULE := apns-conf-cu.xml

LOCAL_MODULE_OWNER := 

#定义源文件列表
LOCAL_SRC_FILES := etc\$(LOCAL_MODULE)

#定义模块的标签为optional
LOCAL_MODULE_TAGS := optional

#etc表示文件将复制到/system/etc下
LOCAL_MODULE_CLASS := ETC

#指定编译模块的类型为APK,这将包含

include $(BUILD_PREBUILT)

6. 定义host平台下的jar包

将系统编译时用到的sigapk.jar预编译,然后复制到out目录中,这样,Build系统将能够使用这个文件来给其他文件签名

nclude $(CLEAR_VARS) 

#这里可以是任何字符串,但必须是唯一的目标

LOCAL_MODULE := signapk

LOCAL_PREBIULT_JAVA_LIBRARIES := lib/$(LOCAL_MODULE).jar

#指定编译模块的类型为BUILD_HOST_PREBUILT,这将包含

include $(BUILD_HOST_PREBUILT)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值