当前位置:   article > 正文

Anroid 内置APK

Anroid 内置APK

 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

  1. LOCAL_PATH:= $(call my-dir)
  2. include $(CLEAR_VARS)
  3. LOCAL_MODULE := Cloud
  4. LOCAL_MODULE_TAGS := optional
  5. LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
  6. LOCAL_MODULE_CLASS := APPS
  7. LOCAL_DEX_PREOPT := false
  8. LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
  9. LOCAL_CERTIFICATE := PRESIGNED
  10. LOCAL_MODULE_PATH := $(TARGET_OUT)/vendor/operator/app
  11. include $(BUILD_PREBUILT)

内置应用还有别的方式,将so文件编译成模块,然后和apk关联:

  1. LOCAL_PATH:= $(call my-dir)
  2. include $(CLEAR_VARS)
  3. LOCAL_MODULE := StuInteraction_release
  4. LOCAL_MODULE_TAGS := optional
  5. LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
  6. LOCAL_MODULE_CLASS := APPS
  7. LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
  8. LOCAL_CERTIFICATE := PRESIGNED
  9. LOCAL_MODULE_PATH := $(TARGET_OUT)/app
  10. APP_ABI := armeabi-v7a
  11. LOCAL_REQUIRED_MODULES := libgnustl_shared libnetsdk
  12. include $(BUILD_PREBUILT)
  13. include $(CLEAR_VARS)
  14. LOCAL_MODULE := libgnustl_shared
  15. LOCAL_MODULE_TAGS := optional
  16. LOCAL_SRC_FILES := lib/armeabi-v7a/libgnustl_shared.so
  17. LOCAL_MODULE_CLASS := SHARED_LIBRARIES
  18. LOCAL_MODULE_SUFFIX := .so
  19. LOCAL_MULTILIB := 32
  20. include $(BUILD_PREBUILT)
  21. include $(CLEAR_VARS)
  22. LOCAL_MODULE := libnetsdk
  23. LOCAL_MODULE_TAGS := optional
  24. LOCAL_SRC_FILES := lib/armeabi-v7a/libnetsdk.so
  25. LOCAL_MODULE_CLASS := SHARED_LIBRARIES
  26. LOCAL_MODULE_SUFFIX := .so
  27. LOCAL_MULTILIB := 32
  28. include $(BUILD_PREBUILT)

还有另外一种内置方式:

  1. LOCAL_PATH := $(call my-dir)
  2. include $(CLEAR_VARS)
  3. # Module name should match apk name to be installed
  4. LOCAL_MODULE := CloudControl
  5. LOCAL_MODULE_TAGS := optional
  6. LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
  7. LOCAL_MODULE_CLASS := APPS
  8. LOCAL_MODULE_TARGET_ARCH := arm64
  9. LOCAL_PREBUILT_JNI_LIBS := \
  10. lib/arm64-v8a/liblocSDK7b.so \
  11. lib/arm64-v8a/liblocSDK7b.so
  12. LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
  13. LOCAL_CERTIFICATE := PRESIGNED
  14. include $(BUILD_PREBUILT)

这种方式我在高通芯片平台内置app的时候比较常用,这种内置方式需要将lib库提前从app中提取出来.

如果不提取应用中的lib库进行内置的话,会提示:

    java.lang.UnstatisfiedLinkError conldn't find xx.so

这种内置方式在编译完成后会将lib下so文件拷贝到system/app/CloudControl/lib/arm64/路径下,就可以解决这个问题了~

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/744238
推荐阅读
相关标签
  

闽ICP备14008679号