Android NDK笔记
目录
Android NDK笔记
AOSP
Android Open Source Project,简称AOSP,android源码项目。
研究android底层的话会用到。一般的android开发者则不必。
Android repository
SDK/NDK等包,可从如下repo地址下载和更新:
- 'https://dl.google.com/android/repository' (官方)
- 'https://dl-ssl.google.com/android/repository' (官方)
- 'http://mirrors.neusoft.edu.cn/android/repository' (大连东软)
- 'http://mirrors.zzu.edu.cn/android/repository/' (郑大)
其中官方repo的优点是权威,缺点是不提供目录浏览功能,想知道所有发布的某个包(如sdk)版本只能靠猜和试;国内的两个repo优点是访问速度快,缺点是有时候更新失败。
Android SDK / SDK Tools
- 世界上只有<25版本的android sdk压缩包
- sdk压缩包是tools包套了一层目录
- tools压缩的各个版本都能下载
- tools包里的
android(linux)或android.bat(windows)功能强大,提供创建项目、更新adb/sdk、管理avd等功能。 - 从tools25.2.3开始,提供
tools/bin/sdkmanager替代tools/android,增加了管理(查看、下载)各子包(如cmake、lldb、ndk)的功能 - sdkmanager的下载:有些包可以选择不同版本,有些包(如ndk)只能下载最新的
谷歌官方提供的android sdk压缩包只支持到24.4.1版,后续版本改为下载tools压缩包。sdk压缩包其实就是tools包套了一层目录:
- add-ons (空目录)
- platforms (空目录)
- tools
- SDK Readme.txt (没啥用)
sdk版本<25时,sdk压缩包下载地址模板:
def android_sdk_download_url(ver, os):
"""
ver: 'r22.6.2', 'r23', 'r24.0.2', 'r24.2', 'r24.3.4', 'r24.4.1', etc
os: 'windows', 'linux', 'macosx'
fmt: 'exe', 'zip', 'tgz'
搭配使用:
- windows.exe
- windows.zip
- macosx.zip
- linux.tgz
当 float(ver[1:])<25:
既存在sdk包: return 'http://dl.google.com/android/android-sdk_{:s}-{:os}.tgz'.format(ver, os)
也存在tools包: return 'http://dl.google.com/android/repository/tools_{:s}-{:os}.tgz'.format(ver, os)
当 float(ver[1:])>=25:
只存在tools包: return 'http://dl.google.com/android/repository/tools_{:s}-{:os}.tgz'.format(ver, os)
其中repository地址,可以考虑换成国内android repository来加速(zzu和neusoft)
"""
if float(ver[1:])<25:
return 'http://dl.google.com/android/android-sdk_{:s}-{:os}.tgz'.format(ver, os)
else:
return 'http://dl.google.com/android/repository/tools_{:s}-{:os}.tgz'.format(ver, os)
NDK
使用NDK,有必要过一遍官方指导:https://developer.android.com/ndk/guides/
只要知道ndk的下载地址,就可以从{浏览器/wget/迅雷}下载。获取各版本ndk的下载地址有一个模板:
def android_ndk_download_url(ver, os, arch='x86_64', repo='https://dl.google.com/android/repository'):
"""
ver: 'r10e', 'r11b', ..., 'r17b', etc
os: 'windows', 'linux', 'darwin'
arch: 'x86', 'x86_64'
repo: the url of android repository. available:
- 'https://dl.google.com/android/repository' (官方)
- 'https://dl-ssl.google.com/android/repository' (官方)
- 'http://mirrors.neusoft.edu.cn/android/repository' (大连东软)
- 'http://mirrors.zzu.edu.cn/android/repository/' (郑大)
e.g.:
https://dl.google.com/android/repository/android-ndk-r17b-windows-x86.zip
https://dl.google.com/android/repository/android-ndk-r17b-windows-x86_64.zip
https://dl.google.com/android/repository/android-ndk-r17b-darwin-x86_64.zip
https://dl.google.com/android/repository/android-ndk-r17b-linux-x86_64.zip
"""
return '{:s}/android-ndk-{:s}-{:s}-{:s}.zip'.format(repo_url, ver, os, arch)
cmake && ninja
用到NDK的代码(C/C++)需要被构建,编译出.a或者.so,这需要构建工具。android repository提供的是cmake+ninja的组合。
利用sdkmanager下载cmake,注意指定cmake版本。ninja会被同时下载。
lldb
利用sdkmanager下载。
adb / fastboot: 都在platform-tools
adb很重要:
- 通过命令行将apk装到模拟器/真机时需要用到
- 通过android studio调试时用到
从sdk 22.6.2版本开始,adb就被移到platform-tools目录了(很久远了)。所以,需要用adb则应当下载platform-tools包。
实例:ubuntu命令行安装android sdk/ndk/cmake/lldb
#参考:
#https://gist.github.com/zhy0/66d4c5eb3bcfca54be2a0018c3058931
# Install Oracle JDK 8
add-apt-repository ppa:webupd8team/java
apt-get update
apt-get install -y oracle-java8-installer
apt-get install -y unzip make # NDK stuff
# Get SDK tools (link from https://developer.android.com/studio/index.html#downloads)
wget https://dl.google.com/android/android-sdk_r24.4.1-linux.tgz
tar xf android-sdk*-linux.tgz
# Get NDK (https://developer.android.com/ndk/downloads/index.html)
wget https://dl.google.com/android/repository/android-ndk-r12b-linux-x86_64.zip
uznip android-ndk*.zip
# Let it update itself and install some stuff
# 特别慢。
cd android-sdk-linux/tools
./android update sdk --no-ui
# Download every build-tools version that has ever existed
# This will save you time! Thank me later for this
# 这样会只下载某个版本吗?
./android update sdk --all --no-ui --filter $(seq -s, 27)
#安装cmake。必须指定版本。我从windows上的android studio中找出来的。
~/soft/android-sdk-linux/tools/bin/sdkmanager "cmake;3.6.4111459"
#lldb,和cmake真是难兄难弟。
~/soft/android-sdk-linux/tools/bin/sdkmanager "lldb;3.1"
jni的两种构建方式
- ndk-build
- NDK中的MakeFile有Application.mk和Android.mk两个文件组成
- 具体写法参照ndk官方:https://developer.android.com/ndk/guides/android_mk
- 网友写的一篇参考博客:https://www.jianshu.com/p/c2c23690818f
- CMake + Ninja
对应的编译指令模板为:
mkdir build-android
cd build-android
cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake \
-DANDROID_ABI="armeabi-v7a" -DANDROID_ARM_NEON=ON \
-DANDROID_PLATFORM=android-14 ..
make
make install
make package
一些小细节
使用clang替代gcc
Android NDK: WARNING: Deprecated NDK_TOOLCHAIN_VERSION value: 4.9. GCC is no longer supported and wi
Android NDK从r11开始建议大家切换到clang。并且把GCC标记为deprecated,将GCC版本锁定在GCC 4.9不再更新。
参考:https://zhuanlan.zhihu.com/p/27470060
字节对齐
ndk r10d开始,编译器用16字节堆栈对齐。
参考:https://www.oschina.net/news/57886/android-ndk-revision-10d
Android NDK笔记的更多相关文章
- android NDK 笔记
*************************************************华丽的分割线********************************************* ...
- Android NDK开发及OpenCV初步学习笔记
https://www.jianshu.com/p/c29bb20908da Android NDK开发及OpenCV初步学习笔记 Super_圣代 关注 2017.08.19 00:55* 字数 6 ...
- [笔记] Android NDK 开发笔记
学习下Android NDK的开发,做些笔记记录下. [笔记] Windows下使用Android Studio 创建缺省工程 [笔记] Windows下使用Android Studio开发NDK的最 ...
- Android NDK JNI 入门笔记-day04-NDK实现Hash算法
* Android NDK JNI 入门笔记目录 * 开头 前面的学习,我们已经掌握了 NDK 开发的必备知识. 下一步就要多实践,通过创造问题并解决问题,来增加熟练度,提升经验. 日常开发中,经常会 ...
- (转)Android: NDK编程入门笔记
转自: http://www.cnblogs.com/hibraincol/archive/2011/05/30/2063847.html 为何要用到NDK? 概括来说主要分为以下几种情况: 1. 代 ...
- [Cocos2d-x学习笔记]Android NDK: Host 'awk' tool is outdated. Please define NDK_HOST_AWK to point to Gawk or Nawk解决方案
Android NDK: Host 'awk' tool is outdated. Please define NDK_HOST_AWK to point to Gawk or Nawkawk过期网上 ...
- c++/cmake /Android NDK 动态链接库交叉编译笔记
项目使用cmake管理,由于项目的需要,核心代码要求跨 Linux/Windows/Android 三平台.Windows和Linux都好说,但Android NDK费了一番功夫还是没有解决.临时的解 ...
- Android NDK 开发(三)--常见错误锦集合Log的使用【转】
转载请注明出处:http://blog.csdn.net/allen315410/article/details/41826511 Android NDK开发经常因某些因素会出现一些意想不到的错误, ...
- Android NDK环境配置
之前做了一个基于ffmpeg的软解播放器,熟悉了NDK开发的配置环境过程,但是由于太忙一直没有时间写笔记. 首先,介绍一下在这里所参与协作的软件包: 1. JDK: 这个软件被Eclipse依赖. 2 ...
随机推荐
- 【php】随缘php企业网站管理系统V2.0 shownews.php注入漏洞
程序名称:随缘网络php企业网站管理系统2.0免费版 以下为系统的功能简介: 1.采用div+css布局经测试兼容IE及firefox主流浏览器,其他浏览器暂未测试. 2.产品新闻三级无限分类. 3. ...
- for循环查找元素怎么跳出for循环
应用场景: 当我们通过for循环来循环对象或者数组时,当找到符合条件的数据时,想要跳出这个循环,不在执行循环继续往后面查找. 解决方法: for循环里面使用return没有效果,于是,我们回到最初控制 ...
- html单选按钮用jQuery中prop()方法设置
模拟单选按钮时用jQuery,prop方法来设置. 赋默认选中值:$("#" + id).find("input:radio[value='" + state ...
- 设计模式C++学习笔记之十五(Composite组合模式)
15.1.解释 概念:将对象组合成树形结构以表示“部分-整体”的层次结构.Composite使得用户对单个对象和组合的使用具有一致性. main(),客户 CCorpNode,抽象基类,实现基本信 ...
- Unity打包PC端各种屏幕适配,无边框,最小化,显示可拖拽部分
using UnityEngine; using System.Collections; using UnityEngine.EventSystems; //using UnityEngine.Sce ...
- DBUtils--数据库连接池
介绍 DBUtils是一套Python数据库连接池包,并允许对非线程安全的数据库接口进行线程安全包装. pg大概是是PostgreSQL(基于PyGreSQL)数据库,DB是其他数据库 Steady[ ...
- nginx 403 forbidden
2018年3月9日14:11:59 总结一下: 1. 查看目录或者文件是否是可读可执行 2. 查看nginx配置的server -> location -> index指令, 看其列出的入 ...
- .net常用的代码生成工具
之前很多从事C#开发的用过动软代码生成器,然后随着IT技术的快速发展,涌现出很多优秀的工具关于.Net的,首推微软的Entity Framework,其次是NHibernate.Entity Fram ...
- [转]ASCII码表及扩展ASCII码表,方便查阅
ASCII码表可以看成由三部分组成: 第一部分:由00H到1FH共32个,一般用来通讯或作为控制之用.有些可以显示在屏幕上,有些则不能显示,但能看到其效果(如换行.退格).如下表: 第二部分:是由20 ...
- [加密算法]为什么说RSA难以被破解
RSA算法运用了数学“两个大的质数相乘,难以在短时间内将其因式分解”的这么一套看似简单事实上真的是很困难的一个数学难题...... 以前也接触过RSA加密算法,感觉这个东西太神秘了,是数学家的事,和我 ...