赞
踩
LOCAL_PATH := $(call my-dir)
每个Android.mk文件必须以定义LOCAL_PATH为开始。它用于在开发tree中查找源文件。
宏my-dir 则由Build System提供。返回包含Android.mk的目录路径。
include $(CLEAR_VARS)
CLEAR_VARS 变量由Build System提供。并指向一个指定的GNU Makefile,由它负责清理很多LOCAL_xxx.
例如:LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES等等。但不清理LOCAL_PATH.
这个清理动作是必须的,因为所有的编译控制文件由同一个GNU Make解析和执行,其变量是全局的。所以清理后才能避免相互影响。
LOCAL_MODULE := Cloud
LOCAL_MODULE模块必须定义,以表示Android.mk中的每一个模块。名字必须唯一且不包含空格。
Build System会自动添加适当的前缀和后缀。例如,foo,要产生动态库,则生成libfoo.so. 但请注意:如果模块名被定为:libfoo.则生成libfoo.so. 不再加前缀
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk LOCAL_SRC_FILES变量必须包含将要打包的APK文件,apk文件和Android.mk放同一级目录即可。
LOCAL_MODULE_CLASS 指定文件类型,apk文件用APPS, 并且 会检查 是否是apk文件,动态库so文件用SHARED_LIBRARIES ,bin文件用EXECUTABLES,其他文件 用ETC
LOCAL_DEX_PREOPT := false 打包生成.apk 不会附带生成.odex文件
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX) module的后缀,内置apk文件的后缀是.apk
LOCAL_CERTIFICATE := PRESIGNED 表示这个apk已经签过名了,系统不需要再次 签名;
LOCAL_MODULE_PATH := $(TARGET_OUT)/vendor/operator/app 指定拷贝的路径,如果路径不存在自己创建
include $(BUILD_PREBUILT) 预置apk
- LOCAL_PATH:= $(call my-dir)
-
- include $(CLEAR_VARS)
- LOCAL_MODULE := Cloud
- LOCAL_MODULE_TAGS := optional
- LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
- LOCAL_MODULE_CLASS := APPS
- LOCAL_DEX_PREOPT := false
- LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
- LOCAL_CERTIFICATE := PRESIGNED
- LOCAL_MODULE_PATH := $(TARGET_OUT)/vendor/operator/app
- include $(BUILD_PREBUILT)
内置应用还有别的方式,将so文件编译成模块,然后和apk关联:
- LOCAL_PATH:= $(call my-dir)
- include $(CLEAR_VARS)
- LOCAL_MODULE := StuInteraction_release
- LOCAL_MODULE_TAGS := optional
- LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
- LOCAL_MODULE_CLASS := APPS
- LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
- LOCAL_CERTIFICATE := PRESIGNED
- LOCAL_MODULE_PATH := $(TARGET_OUT)/app
- APP_ABI := armeabi-v7a
- LOCAL_REQUIRED_MODULES := libgnustl_shared libnetsdk
- include $(BUILD_PREBUILT)
-
- include $(CLEAR_VARS)
- LOCAL_MODULE := libgnustl_shared
- LOCAL_MODULE_TAGS := optional
- LOCAL_SRC_FILES := lib/armeabi-v7a/libgnustl_shared.so
- LOCAL_MODULE_CLASS := SHARED_LIBRARIES
- LOCAL_MODULE_SUFFIX := .so
- LOCAL_MULTILIB := 32
-
- include $(BUILD_PREBUILT)
-
- include $(CLEAR_VARS)
- LOCAL_MODULE := libnetsdk
- LOCAL_MODULE_TAGS := optional
- LOCAL_SRC_FILES := lib/armeabi-v7a/libnetsdk.so
- LOCAL_MODULE_CLASS := SHARED_LIBRARIES
- LOCAL_MODULE_SUFFIX := .so
- LOCAL_MULTILIB := 32
-
- include $(BUILD_PREBUILT)
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
还有另外一种内置方式:
- LOCAL_PATH := $(call my-dir)
- include $(CLEAR_VARS)
- # Module name should match apk name to be installed
- LOCAL_MODULE := CloudControl
- LOCAL_MODULE_TAGS := optional
- LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
- LOCAL_MODULE_CLASS := APPS
- LOCAL_MODULE_TARGET_ARCH := arm64
- LOCAL_PREBUILT_JNI_LIBS := \
- lib/arm64-v8a/liblocSDK7b.so \
- lib/arm64-v8a/liblocSDK7b.so
- LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
- LOCAL_CERTIFICATE := PRESIGNED
- include $(BUILD_PREBUILT)
这种方式我在高通芯片平台内置app的时候比较常用,这种内置方式需要将lib库提前从app中提取出来.
如果不提取应用中的lib库进行内置的话,会提示:
java.lang.UnstatisfiedLinkError conldn't find xx.so
这种内置方式在编译完成后会将lib下so文件拷贝到system/app/CloudControl/lib/arm64/路径下,就可以解决这个问题了~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。