Application.mk的用處

2024-05-28 06:38
文章标签 application mk

本文主要是介绍Application.mk的用處,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

轉載自 http://blog.csdn.net/vincent_blog/article/details/9179271

 

我们在编写JNI代码时有一个可选的文件Application.mk ,这个文件你可以不创建,但是有时候是有必要写一个这样的文件的。

Application.mk文件用于描述应用程序本身的一些属性信息,如应用程序依赖哪些库,应用程序的根目录,应用程序运行在哪些类型指令集的CPU下,还有一些编译选项,

在此文件中定义的东西会应用于整个应用程序包括android.mk也会用到这里面的选项。

 

如果你不写此文件,会默认编出所有android.mk中写的libs / modules APP_ABI会默认指定为armeabi

下面我们主要介绍APP_ABI的用途。

 

首先市面上的android智能设备很多也很杂,各种类型各个厂家的芯片,但都是基于某种指令集来开发出来的,这里的ABI(Application Binary Interface)实际就是指应用程序基于哪种指令集来进行编译,官方文档说其实是以下几点不同:

 

- the CPU instruction set that the machine code should use- the endianness of memory stores and loads at runtime- the format of executable binaries (shared libraries, programs, etc...)and what type of content is allowed/supported in them.- various conventions used to pass data between your code andthe system (e.g. how registers and/or the stack are used when functionsare called, alignment constraints, etc...)- alignment and size constraints for enum types, structure fields andarrays.- the list of function symbols available to your machine code at runtime,generally from a very specific selected set of libraries.

 

 

我们能用到的ABI 也就四种  armeabi armeabi-v7a x86 和mips 前两者最常用到。

在编译的时候你可以指定其中的一种或者几种,如果指定了几种,这时候打包到APK后这个APK被称为“胖二进制”,也就是它包含了几种ABI类型的lib

当APK被安装到设备上的时候,android系统有这样一个机制:

系统支持哪些ABI类型它自己是知道的,它们会将最适合机器性能发挥的ABI类型标记位'primary' 把剩下的也支持的标记为‘secondary’

例如

CPU 工艺为 ARMv5TE-based 的CPU只有'primary'  为armeabi  没有'secondary'
而类型为ARMv7-based的CPU 'primary'  为armeabi-v7a  'secondary'为armeabi

 

应用程序安装的时候系统首先检查lib/<primary-abi>/libxx.so 如果有的话就将此处的lib随应用程序copy到/data/app/下面这个大家应该知道第三方应用的安装目录

如果没有的话,而机器有secondary ,就检查lib/<secondary-abi>/libxx.so 

 

所以这就是为什么我们不用写application.mk 而应用程序能在amrv7 的机器上面跑得好好的,但是这有可能没有发挥到amrv7的最有效的性能。

所以如果是我写应用程序我会指定两个或更多(当然这可能造成APK体积增大,这个要自己取舍)

 

另外推荐一个工具查看android系统的硬件信息 z-devicetest  ,可以看到CPU型号等具体信息。

这篇关于Application.mk的用處的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1009812

相关文章

(南京观海微电子)——GH7006 Application Note

Features ⚫ Single chip solution for a WXGA α-Si type LCD display ⚫ Integrate 1200 channel source driver and timing controller ⚫ Display Resolution: ◼ 800 RGB x 480 ◼ 640 RGB x 480 ⚫ Display int

git中,隐藏application.properties文件,修改不用提交了

git中,隐藏application.properties文件,修改不用提交了 A、将文件名放入 .gitignore 文件中 B、执行git命令隐藏文件         执行在ide上执行命令         a、执行隐藏命令 git rm --cached src/main/resources/application.properties          b、执行提交命

#error: Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version

昨天编译文件时出现了Building MFC application with /MD[d] (CRT dll version)requires MFC shared dll version~~~~的错误。   在网上很容易找到了解决的方案,公布如下:   对着你的项目点击右键,依次选择:属性、配置属性、常规,然后右边有个“项目默认值”,下面有个MFC的使用,选择“在共享 DLL 中使

How to apply streaming in azure openai dotnet web application?

题意:"如何在 Azure OpenAI 的 .NET Web 应用程序中应用流式处理?" 问题背景: I want to create a web api backend that stream openai completion responses. "我想创建一个 Web API 后端,用于流式传输 OpenAI 的完成响应。" How can I apply the f

XCode6 中如何创建empty application工程

在XCode 6中,创建IOS工程时,移除了empty application工程模板。但有时候我们又想创建empty application工程,该怎么办呢? 具体步骤如下: 1、在IOS工程中,选择创建一个Single View Application工程。 2、创建好后,把工程目录下的Main.storyboard和LaunchScreen.xib删除,扔进废纸篓。 3、打开Info

myeclipse导入项目右键runas中没有MyEclipse Server Application,而且往tomcat部署时也不能自动定位到项目

说明myeclipse没有识别导入的工程,没有web模块就没有办法使用web的server。 检查工程目录下的.project文件中有没有如下部分: <natures><nature>com.genuitec.eclipse.ast.deploy.core.deploymentnature</nature><nature>com.genuitec.eclipse.spri

SecureCRT Application 已停止工作

解决方法一: cmd ----> regedit —>HKEY_LOCAL_MACHINE\SOFTWARE\vandyke 删掉vandyke 解决方法二: SecureCRT使用过程中出现异常后自动关闭,导致下次无法正常启动(运行程序无反应),此时一种可能的原因是由于SecureCRT异常关闭,所以异常关闭会在C:\Documents and Settings\Administrator\

spark-shell启动报错:Yarn application has already ended! It might have been killed or unable to launch...

前半部分转自:https://www.cnblogs.com/tibit/p/7337045.html (后半原创) spark-shell不支持yarn cluster,以yarn client方式启动 spark-shell --master=yarn --deploy-mode=client 启动日志,错误信息如下   其中“Neither spark.yarn.ja

If an application has more than one locale, then all the strings declared in one language should als

字符串资源多国语言版本的出错问题 假如你仅仅针对国内语言 加上这句即可 //保留中文支持resConfigs "zh"

Zabbix 企业级高级应用(Zabbix Enterprise Advanced Application)

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页,持续学习,不断总结,共同进步,活到老学到老 导航剑指大厂系列:全面总结 运维核心技术:系统基础、数据库、网路技术、系统安全、自动化运维、容器技术、监控工具、脚本编程、云服务等。 常用运维工具系列:常