做了不少NDK相关的工作,不知道别人有没有同样的困惑,经常在编译C/C++代码的时候会出一些error或者warning,然后在网上搜,发现在Android.mk或者Application.mk文件中加一些配置选项就能解决,但是加完之后却不知道这些都是干什么用的,或者找不到系统学习的地方。我猜可能是开发NDK的程序员对于利用NDK写代码的程序员的能力太过自信,所以没有给出什么参考资料,顶多就是NDK目录下的Doc。这就导致在优化动态链接库的时候,除了提升算法、代码级优化,往往不知从何下手。对于这个问题我也一直很头疼,不过最近算是有了点起色,下面是我个人的理解。

所谓的Android.mk和Application.mk其实和Linux系统中的makefile是非常接近,就是一种用于编译比较大工程并配置编译选项的文件。其中不同的部分一般都是NDK中自己添加的,这些在Doc里面基本都写到了,剩下的部分就都是GCC编译器的选项了,参考网站:

http://gcc.gnu.org/onlinedocs/gcc-4.8.1/gcc/index.html#toc_Invoking-GCC

http://gcc.gnu.org/onlinedocs/gcc-4.3.6/gnat_ugn_unw/Improving-Performance.html#Improving-Performance

在优化动态链接库大小和速度的时候,其实主要就是LOCAL_CFLAGS和LOCAL_LDFLAGS这两个,一般来说在LOCAL_CFLAGS后面追加-O1,O2,O3,Os,Ofast这几个选项就差不多能满足要求,如果感觉还是不满意的话,可以自己再逐项进行优化,比如在LOCAL_CFLAGS追加-ffunction-sections和-fdata-sections,在LOCAL_LDFLAGS追加-Wl,--gc-sections编译选项。这样基本就差不多了。当然,要想进行深入的研究和优化,可能还要好好研究一下gnu官网给出的资料。

android so导致启动慢,谈谈Android NDK中动态链接库(.so文件)的优化相关推荐

  1. android属于数据库管理系统,详细谈谈Android系统中的SQLite数据库的应用

    数据库是按照数据结构来组织.存储和管理数据的仓库,而在信息话的社会,数据库又不单单仅限与数据的相关内容,现在数据库技术是管理信息系统.办公自动化系统.决策支持系统等各类信息系统的核心部分,而SQL是结 ...

  2. Android学习记录:SQLite数据库、res中raw的文件调用

    http://blog.csdn.net/he11o_liu/article/details/48918653

  3. Android 系统(215)---Android O_GO后台启动服务改动

    Android O_GO后台启动服务改动 Android O_GO后台启动服务改动 1. 问题现象 应用在适配Android O/GO的系统时,会发现后台启动不了服务,会报出如下异常,并强退: jav ...

  4. android源码中的ndk,如何在不需要Android操作系统源代码的情况下在Android NDK中创建新的NativeWindow?...

    我想编译一个Android OpenGL控制台应用程序,您可以直接从控制台启动Android x86或从Android x86 GUI中的Android终端应用程序运行.如何在不需要Android操作 ...

  5. Android 开机动画启动、播放、退出流程(android 10)

    Android 开机动画启动流程 (android 10) 1 开机动画启动流程 我们先来看一下开机动画是如何启动,并开始播放的. 通过系统启动流程分析可以得知,在系统内核启动后,会启动第一个init ...

  6. 【Android 安全】DEX 加密 ( 代理 Application 开发 | 加载 dex 文件 | 反射获取系统的 Element[] dexElements )

    文章目录 一.dex 文件准备 二.加载 dex 文件流程 三.Element[] dexElements 分析 四.反射获取系统的 Element[] dexElements 参考博客 : [And ...

  7. android开发java环境_搭建Android开发环境 - Android - mobile - JavaEye论坛

    Android的开发现在是如火如荼,逞现在不是很忙了,学习了下,这里记录下了在windows在如何搭建Android开发环境,对自己是个记录,对新入门的兄弟姐妹们可以参考一下! (1)安装JDK,省略 ...

  8. 谈谈Android App混合开发

    推酷 文章 站点 主题 公开课 活动 客户端 荐 周刊 登录 谈谈Android App混合开发 时间 2015-08-25 20:13:43bxbxbai 原文  http://bxbxbai.gi ...

  9. 【Android 逆向】Android 进程注入工具开发 ( 系统调用 | Android NDK 中的系统调用示例 )

    文章目录 一.系统调用 二.Android NDK 中的系统调用示例 一.系统调用 在 " 用户层 " , 运行的都是用户应用程序 ; 用户层 下面 是 驱动层 , 驱动层 下面是 ...

最新文章

  1. RecyclerView 点击Item 改变文字颜色以及所在的背景色
  2. 【Android 应用开发】 自定义 圆形进度条 组件
  3. CentOS 初体验二十二:redis常用命令:Hash
  4. 学好Windows编程要看的书籍
  5. 如何设置Server-U的IP限制
  6. 【NOIP模拟赛】超级树 DP
  7. Linux操作Oracle(3)——Oracle OPatch打补丁遇到问题详细汇总详细记录
  8. Linux下汇编语言学习笔记51 ---
  9. 【UKIEPC2017:D】Deranging Hat(求序列a到a‘交换过程的具体实现)
  10. Springboot+Vue+EasyExcel实现web页面的excel下载
  11. 未知错误 ID:-2147467259 操作必须使用一个可更新的查询
  12. Promise优缺点
  13. linux邮件客户端配置文件,在Deepin V20下配置Evolution邮件客户端,添加新邮箱全过程...
  14. 2020C证(安全员)考试题及C证(安全员)考试题库
  15. LinuxProbe 0x13 网站服务程序、SELinux安全子系统、个人用户主页功能、虚拟网站主机功能
  16. 龙芯(Loongarch64),在Linux虚拟一个龙芯OS体验下
  17. 检查你的python代码是否符合PEP8规范
  18. Jsdelivr CDN 加速服务又被 DNS 污染了(附临时解决方案)
  19. MASM32连接程序时error A2006: undefined symbol : u
  20. “保险+大数据” 车险费改怎么玩?

热门文章

  1. R语言导出为html,科学网—[转载]R语言中数据的导入与导出(笔记) - 刘朋的博文...
  2. Git从现有仓库新建干净版本(清除版本commit记录)
  3. 前端常用效果(3)带动画的比较型柱状图
  4. 英特尔与Verizon合力推动5G技术 新网络传输革命即将来临
  5. easyUI datebox 日期空间斜杠格式化。例如将日期空间中显示2017-03-13,改为2017/03/13...
  6. Linux分区和加密分区操作
  7. logrotate 命令切换linux系统日志
  8. C++之String的find方法,查找一个字符串在另一个字符串的什么位置;leveldb字符串转数字解析办法...
  9. 主题:大胆预测下JS框架的走势(ZT)
  10. mysql 文章 字段设计_在mysql数据库中,文章表设计有啥好的思路