Android NDK编译hello world真机运行
来源:互联网 发布:换发型的软件 编辑:程序博客网 时间:2024/06/05 23:51
本文转载随意 ^_^
- 使用NDK生成独立的交叉工具链
- Linux下环境配置及编译
- 测试运行
一、使用NDK生成独立的交叉工具链
首先需要从NDK包中获取独立的编译工具链,我的编译环境是Linux Mint 18,下文也是在该环境下操作的,ubuntu大同小异(建议使用最新的NDK):
cd 到你的ndk根目录,然后cd build/tools 运行以下命令
sudo ./make_standalone_toolchain.py \--arch=arm \--api=23 \--install-dir=/opt/arm-linux-androideabi参数说明: 1) --arch=arm 表示目标架构, 可选值是arm,arm64,mips,mips64,x86,x86_64 我的手机是一加X 801的CPU,属于arm-32bit,所以选arm 2)--api=23 表示API Level,现在我的手机系统是Android 6.0,API=23 3)--install-dir 后面跟着的是安装地址
二、 Linux下环境配置及编译
gedit ~/.bashrc 在文件末尾添加下面一行后,保存退出,重新打开终端,新的环境变量就可生效
export PATH=$PATH:/opt/arm-linux-androideabi/bin
编译hello.c
#include <stdio.h>int main(void){ printf("Hello World!\n"); return 0;}
arm-linux-androideabi-gcc -pie -fPIE -o hello hello.c
切勿忘记在编译选项中添加 -pie -fPIE,否则在较新版本的Android系统上是无法运行的。按照google的说法,这是为了出于安全的考虑。查看《深入Linux内核架构》进程地址空间一章中,“PM_RANDOMIZE被设置后,内核不会为栈和内存 映射的起点选择固定位置, 而是在每次新进程启动时随机改变这些值的设置。这引入一个一些复杂性,使得攻击因缓存区溢出导致的安全漏洞更加困难”。我想很有可能和PM_RANDOMIZE有关系,这里不再深入讨论。
三、测试运行
我的手机tmpfs文件系统是挂载在/mnt下的,所以先把hello这个可运行文件adb push到这个目录
adb push ./hello /mnt
然后adb shell —> su —>cd /mnt —> chmod 777 hello –> ./hello (手机需要root,当输入su的时候,手机会弹出个窗口说shell请求root,点击同意即可)
可以看到Hello World打印出来啦~
0 0
- Android NDK编译hello world真机运行
- android ndk hello,world!
- android ndk Hello World
- 编译android内核源码然后用真机运行
- ubuntu 第一个Hello world模块编译(本机运行)
- android NDK 开发 Hello World
- android ndk之hello world
- android NDK 之Hello world
- Android NDK Socket Hello World
- Android-NDK-之Hello-World
- Android NDK开发“Hello World NDK”
- Android NDK开发“Hello World NDK”
- 为BlackBerry 10 NDK配置真机运行环境
- (三)使用真机运行“hello andriod”
- Android NDK开发之Hello world篇
- ndk编写android终端hello world
- android ndk开发hello world入门
- Android NDK开发中的 Hello World实例
- poll 机制
- InputStreamReader转换字节流为字符流对象调用readLine读取键盘录入
- AxureRP8.0破解和汉化
- android ndk学习笔记
- poj 1088 / 3624两道简单DP
- Android NDK编译hello world真机运行
- Unknown URL content://downloads/my_downloads 三星引发的血案
- 使用__slot__属性限制class的属性
- 使用 python IDLE 自带的 debuger 进行调试
- POJ 1611 The Suspects
- 北美CS四大名校
- CSS中调用JS函数和变量
- ThinkPhP 框架学习
- Legend QML 类型翻译