Android NDK使用
1. 介绍
这里主要想记录一下Android NDK开发C程序的使用方法
2. ndk下载
到google官网或者国内镜像网站下载android-ndk
形如: android-ndk-r<version>-<os-type>-<arch>.zip
笔者使用的是CentOS 7 x86-64, 下载的是android-ndk-r17b-linux-x86_64.zip
关于不同到底该使用哪个版本的NDK, 从网上获取的信息来看
使用哪个版本都没问题 新版本的NDK应该是向下兼容的 同时倾向于编译64位
当我们开发ndk应用时, 有两种方式
- 使用独立工具链, 仅依赖Linux
- 使用ndk工具, 依赖Android
2. 独立工具链
有两种方式可以生成独立toolchain
首先将android-ndk-r17b-linux-x86_64.zip 解压
2.1 make-standalone-toolchain.sh
# ./build/tools/make-standalone-toolchain.sh --platform=android-23 --package-dir=/opt --toolchain=arm-linux-androideabi-4.9
WARNING: make-standalone-toolchain.sh will be removed in r13. Please try make_standalone_toolchain.py now to make sure it works for your needs.
HOST_OS=linux
HOST_EXE=
HOST_ARCH=x86_64
HOST_TAG=linux-x86_64
HOST_NUM_CPUS=4
BUILD_NUM_CPUS=8
Auto-config: --arch=arm
Copying prebuilt binaries...
Copying sysroot headers and libraries...
Copying c++ runtime headers and libraries...
Creating package file: /opt/arm-linux-androideabi-4.9.tar.bz2
Cleaning up...
Done.
可以看到生成的工具链位于/opt/arm-linux-androideabi-4.9.tar.bz2
参数说明如下:
--platform: Android API版本(android-23 <=> Android 6.0)
--toolchain: 工具链类型,可在toolchains中查看支持的类型
--package-dir: 工具链的存放路径
2.2 make_standalone_toolchain.py
# ./build/tools/make_standalone_toolchain.py --arch arm --api 23 --package-dir /opt
没有任何提示, 在/opt目录下生成了arm-linux-androideabi.tar.bz2
参数说明如下:
--arch: arm,arm64,mips,mips64,x86,x86_64
--api: API version
--package-dir: Package location
其中需要说明的是arch, 通常手机都是arm, 但是是32位还是64位则需要判断一下
参考<关于如何区分Android手机是32位还是64位>
3. ndk构建脚本
ndk提供了比较高级的构建脚本来实现ndk的开发
3.1 配置
在<project>目录下创建Android.mk和Application.mk; 假定源代码为test.c
Android.mk内容如下
LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := testproj LOCAL_SRC_FILES := \
test.c LOCAL_CFLAGS += -Wno-unused-parameter -Wno-pointer-arith \
-Wno-missing-field-initializers include $(BUILD_EXECUTABLE)
Application.mk内容如下
APP_ABI := x86_64
APP_BUILD_SCRIPT := /home/user/proj/Android.mk
3.2 编译
使用如下命令即可进行编译
$ export NDK=<ndk>
$ $NDK/ndk-build NDK_PROJECT_PATH=<project> NDK_APPLICATION_MK=<project>/Application.mk
$ $NDK/ndk-build NDK_PROJECT_PATH=<project> clean NDK_APPLICATION_MK=<project>/Application.mk
参考:
<NDK入门指南>
<Android.mk语法>
<理解Android Build系统>
Android NDK使用的更多相关文章
- Android NDK debug 方法
最近又频繁遇到 NDK 的错误,记录一下debug调试的一些经验,以备后续查看 一般来说,在Android Studio中的Monitor中将过滤器的 LOG TAG 设置为 "DEBUG& ...
- Android NDK开发Hello Word!
在之前的博客中已经为大家介绍了,如何在win环境下配置DNK程序,本篇我将带大家实现一个简单的Hello jni程序,让大家真正感受一下NDK开发的魅力.这里我们选择使用C+JAVA开发Android ...
- Android NDK开发初识
神秘的Android NDK开发往往众多程序员感到兴奋,但又不知它为何物,由于近期开发应用时,为了是开发的.apk文件不被他人解读(反编译),查阅了很多资料,其中有提到使用NDK开发,怀着好奇的心理, ...
- android NDK debug 遇到的问题与解决方法
最近在研究android NDK 的eclipse调试,遇到点问题,总结一下: 1.Unknown Application ABI :在application.mk里面添加APP_PLATFORM ...
- 初识Android NDK
本文介绍Windows环境下搭建Android NDK开发环境,并创建一个简单的使用Native代码的Android Application. 一.环境搭建 二.JNI函数绑定 三.例子 一.环境搭建 ...
- Android SDK Android NDK Android Studio 官方下载地址
2016.12 Android Studio Windows Includes Android SDK https://dl.google.com/dl/android/studio/install/ ...
- Android NDK之JNI陷阱
背景: 最近一个月一直在做移植库的工作,将c代码到share library移植到Android平台.这就涉及到Android NDK(native develop kit)内容.这里只想记录下JNI ...
- Android NDK开发
Android NDK 开发教程(极客学院) 一.Android NDK环境搭建 使用最新ndk,直接抛弃cygwin,以前做Android的项目要用到NDK就必须要下载NDK,下载安装Cygwin( ...
- Eclipse+CDT+GDB调试android NDK程序(转)
Eclipse+CDT+gdb调试android ndk程序 先介绍一下开发环境,在这个环境下,up主保证是没有问题的. ubuntu 11.10 eclipse 3.7(indego) for ja ...
- android NDK入门 windows下安装cygwin
一.Android NDK环境简介 Android NDK 是运行于Android 平台上的Native Development Kit 的缩写. Android 应用开发者可以通过NDK 调用C 或 ...
随机推荐
- [Codeforces958E2]Guard Duty (medium)(区间DP)
Description 题目链接 Solution 可以把题目转化一下模型,将间隔取出来,转化为N-1个数,限制不能取相邻两个数,求取K个数的最小价值 设DP[i][j]表示前i个数取j个最大价值(第 ...
- Leetcode 337. 打家劫舍 III
题目链接 https://leetcode.com/problems/house-robber-iii/description/ 题目描述 在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可 ...
- 笔记-twisted
笔记-twisted 1. 简介 Twisted is an event-driven networking engine written in Python and licensed un ...
- Android启动屏全屏显示
1.为首页面设置一个theme <style name="app_start" > <item name="android:windowNoTitle& ...
- 玩转Openstack之Nova中的协同并发(二)
玩转Openstack之Nova中的协同并发(二) 昨天介绍了Python中的并发处理,主要介绍了Eventlet,今天就接着谈谈Openstack中Nova对其的应用. eventlet 在nova ...
- 基于Xtrabackup备份集来恢复某个误删除的表(drop)
Preface Yesterday,I've demonstratated how to rescue a droped and a truncated table based on ...
- 1102 Invert a Binary Tree (25 分)(二叉树遍历)
二叉树有N个结点,给出每个结点的左右孩子结点的编号,把二叉树反转(左右孩子交换 所以是后序遍历交换) 输出反转后二叉树的层序遍历和中序遍历 #include<bits/stdc++.h> ...
- [转载]kd tree
[本文转自]http://www.cnblogs.com/eyeszjwang/articles/2429382.html k-d树(k-dimensional树的简称),是一种分割k维数据空间的数据 ...
- 稀疏矩阵相乘-Python版
稀疏矩阵相乘-Python版 Given two sparse matrices A and B, return the r ...
- PHP文件操作函数及文件指针理解
知识点: 一.fopen(),文件打开函数,读写参数有: 1.R : 只读,指针在文件开头 2.r+:读写,指针同上 3.W :只写,写入前会删除文件内容,然后指针回到文件开头,文件不存在则创建 4 ...