首页 > 其他分享 >Android.mk变量解析

Android.mk变量解析

时间:2024-05-26 12:58:30浏览次数:25  
标签:CERTIFICATE platform apk mk 编译 Android 解析 LOCAL

前言

Android.mk是Android提供的一种makefile文件,用来指定诸如编译生成so库名、引用的头文件目录、需要编译的.c/.cpp文件和.a静态库文件等。要掌握jni,就必须熟练掌握Android.mk的语法规范。

LOCAL_PATH:= $(call my-dir)

一个Android.mk file首先必须定义好LOCAL_PATH变量。它用于在开发树中查找源文件。在这个例子中,宏函数‘my-dir’, 由编译系统提供,用于返回当前路径(即包含Android.mk file文件的目录)

include $(CLEAR_VARS)

CLEAR_VARS由编译系统提供((可以在 android 安装目录下的/build/core/config.mk 文件看到其定义,为 CLEAR_VARS := $(BUILD_SYSTEM)/clear_vars.mk)),指定让GNU MAKEFILE为你清除许多LOCAL_XXX变量(例如 LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES , 等等…),除LOCAL_PATH 。这是必要的,因为所有的编译控制文件都在同一个GNU MAKE执行环境中,所有的变量都是全局的

LOCAL_MODULE_TAGS := optional

user: 指该模块只在user版本下才编译
eng: 指该模块只在eng版本下才编译
tests: 指该模块只在tests版本下才编译
optional:指该模块在所有版本下都编译

LOCAL_CERTIFICATE := platform

这个功能和 android:sharedUserId和LOCAL_CERTIFICATE 相关。
都是用系统的签名来对apk 进行签名。其中签名的文件是:build\target\product\security",下面的platform.pk8和platform.x509.pem两个文件
签名的工具是:
Android提供的Signapk工具来签名,signapk的源代码是在"build\tools\signapk"下,用法为"signapk platform.x509.pem platform.pk8 input.apk output.apk"
其中通过 android:sharedUserId 也已可应用共享同一个进程,但是如果签名不一样是没有办法共享的,其中签名问题还设计到很多,之后可以补充。
其中这个属性还可以有其他的赋值比如:
LOCAL_CERTIFICATE := PRESIGNED 表示 这个apk已经签过名了,系统不需要再次 签名;
LOCAL_CERTIFICATE := platform 表示为系统签名
LOCAL_CERTIFICATE := media
用于指定签名时使用的KEY,如果不指定,默认使用testkey,LOCAL_CERTIFICATE可设置的值如下:
LOCAL_CERTIFICATE := platform 该APK完成一些系统的核心功能。经过对系统中存在的文件夹的访问测试,这种方式编译出来的APK所在进程的UID为system
LOCAL_CERTIFICATE := shared 该APK需要和home/contacts进程共享数据。
LOCAL_CERTIFICATE := media 该APK是media/download系统中的一环。
LOCAL_CERTIFICATE := testkey 普通APK,默认情况下使用。、
对于使用eclipse编译的apk,其实 是用testkey 来签的名;我们也可以用signapk.jar来手动进行签名,其源码在build/tools/signapk下,编译后在out/host/linux-x86/framework/signapk.jar,也可以从网上下载。使用方法,例如:把签名修改为platform:Java -jar ./signapk platform.x509.pem platform.pk8 input.apk output.apk (platform.x509.pem platform.pk8在build/target/product/security获取)。build/target/product/security获取)。

LOCAL_PROGUARD_ENABLED := disabled

是否混淆

LOCAL_PACKAGE_NAME := Name

给这个package 确定name

LOCAL_PRIVATE_PLATFORM_APIS := true

是否使用系统@hide api

LOCAL_PRIVILEGED_MODULE := true

对于Android系统应用,LOCAL_PRIVILEGED_MODULE 决定了其编译后的在ROM中的安装位置:
如果不设置或者设置为false,安装位置为system/app;
如果设置为true,安装位置为system/priv-app。

LOCAL_AAPT_FLAGS := --auto-add-overlay

aapt即Android Asset Packaging Tool,在SDK的build-tools目录下。该工具可以查看,创建, 更新ZIP格式的文档附件(zip, jar, apk)。也可将资源文件编译成二进制文件,尽管你可能没有直接使用过aapt工具,但是build scripts和IDE插件会使用这个工具打包apk文件构成一个Android 应用程序。也就是上面说的配置

LOCAL_PROGUARD_FLAG_FILES := proguard.flags

针对android 选择user版本进行编译的时候,会出现proguard错误,我们需要知道的事情
1.proguard是做什么的,他的作用是将java代码进行混淆的工具
2.因为proguard是混淆工具,所以android的mk文件也对其支持为两种方式:

2.1指定不需要混淆的native方法与变量的proguard.flags文件如:LOCAL_PROGUARD_FLAG_FILES := proguard.flags
2.2制定编译的工程,不要使用代码混淆的工具进行代码混淆如:LOCAL_PROGUARD_ENABLED := disabled

3.不设置,默认使用LOCAL_PROGUARD_ENABLED := full.即将该工程代码全部混淆

LOCAL_DEX_PREOPT := false

odex文件简单来说就是android为了优化启动速度而将classes.dex文件提取出来的一个产物
不生成odex,只生成apk,将 LOCAL_DEX_PREOPT 的值改为 false 即可

include $(BUILD_SHARED_LIBRARY)

BUILD_SHARED_LIBRARY表示编译一个静态库

include $(BUILD_PACKAGE)

BUILD_PACKAGE表示编译一个APK包

include $(BUILD_SHARED_LIBRARY)

BUILD_SHARED_LIBRARY表示编译一个动态库

标签:CERTIFICATE,platform,apk,mk,编译,Android,解析,LOCAL
From: https://blog.csdn.net/u010345983/article/details/137497348

相关文章

  • 《末路狂花钱》迅雷BT下载/百度云[BD/HD-MP4/MKV1.76G][高清版]
    近年来,中国电影市场蓬勃发展,制作水平和影响力也不断提升。《末路狂花钱》作为一部备受关注的电影,不仅在票房上取得了成功,更引发了人们对社会现实的深入思考。本文将从故事情节、刻画人物和对社会问题的触及等方面,对这部电影进行探讨。末路狂花钱迅雷高清版下载地址如下。 ......
  • Spring解决循环依赖的详细解析及代码分析
    Spring框架在处理Bean的循环依赖时,主要针对单例作用域(Singleton)的Bean,并且是在通过setter方法(即基于property的依赖注入)进行依赖注入时能够解决循环依赖问题。对于构造器注入的循环依赖,Spring是无法解决的,会抛出BeanCurrentlyInCreationException异常。下面是对Spring解决......
  • 【赛题解析】【网络建设与运维】2023年全国职业院校技能大赛中职组“网络建设与运维”
    在此之前,欢迎关注波比网络波比网络官方公众号:blbinet波比网络工作室官方公众号:blbistudio技能大赛各赛项交流群:https://www.blbi.cn/threads/40/更多正式赛题源文件访问:https://www.blbi.cn获取技术支持访问:https://www.blbi.cn/form/1/selectNISP、CIPS、PTE证书可......
  • 【赛题解析】【网络建设与运维】2023年全国职业院校技能大赛中职组“网络建设与运维”
    在此之前,欢迎关注波比网络波比网络官方公众号:blbinet波比网络工作室官方公众号:blbistudio技能大赛各赛项交流群:https://www.blbi.cn/threads/40/更多正式赛题源文件访问:https://www.blbi.cn获取技术支持访问:https://www.blbi.cn/form/1/selectNISP、CIPS、PTE证书可......
  • 猫头虎 解析:为什么AIGC在国内适合做TOB,在国外适合做TOC?
    猫头虎解析:为什么AIGC在国内适合做TOB,在国外适合做TOC?博主猫头虎的技术世界......
  • xLSTM——解析扩展长短期记忆的网络算法与应用
    1.概述二十多年来,塞普·霍赫赖特创举长短期记忆(LSTM)架构在许多深度学习突破和实际应用中发挥了重要作用。从生成自然语言到为语音识别系统提供动力,LSTM一直是人工智能革命背后的驱动力。然而,即使是LSTM的创建者也认识到它们固有的局限性,导致它们无法充分发挥潜......
  • Android跨进程通信--Binder机制及AIDL是什么?
    文章目录Binder机制Binder是什么?Binder相对于其他几种跨进程通信方式,有什么区别?谈一下BinderIPC通信过程:具体的通讯过程是什么?Binder如何处理发送请求与接收请求?Binder是通过什么方式来进行内存映射的?Binder是如何进行管理的?Binder、Socket的数据限制是多少?自己APP如......
  • android git提交代码命令以及常见命令的使用
    安装GitUbuntu:sudoapt-getinstallgit-core创建代码仓库:配置身份:gitconfig--globaluser.name"Tony"gitconfit--globaluser.email"[email protected]"查看身份:gitconfig--globaluser.namegitconfit--globaluser.email提交代码流程创建本地仓库:进......
  • Android Studio下载Gradle超时
    在AndroidStudio打开项目时,出现了下载Gradle超时,导致项目无法运行.首先在gradle-wrapper.properties文件中,查看Gradle版本和zipStorePath:然后查看Gradle包存放的位置:到https://mirrors.cloud.tencent.com/gradle/下载相应的Gradle包:下载路径是Gradle包存放的位置和z......
  • AI时代的Android程序员技能升级之路
    前言随着人工智能技术的飞速发展,我们正处在一个前所未有的技术变革时期。AI不仅改变了我们的生活方式,也深刻影响了软件开发的领域。在这个智能时代,Android程序员作为技术革新的先锋,必须不断学习和适应,以维持其在激烈竞争中的技术优势。AI技术的迅猛发展为程序员带来了双重......