纯手工编写NDK Hello World

1.配置环境变量

添加make工具path环境变量:

E:\Android\android-ndk-r10b\prebuilt\windows-x86_64\bin

2.编写Hello World

新建hello.c

#include <stdio.h>

int main(int argc, char* argv[])
{
  printf("Hello Android!\r\n");
  return 0;
}

3.编写makefile文件如下

#ndk根目录
NDK_ROOT=E:\Android\android-ndk-r10b

#编译器根目录
TOOLCHAINS_ROOT=$(NDK_ROOT)/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64

#编译器目录
TOOLCHAINS_PREFIX=$(TOOLCHAINS_ROOT)/bin/arm-linux-androideabi

#头文件搜索路径
TOOLCHAINS_INCLUDE=$(TOOLCHAINS_ROOT)/lib/gcc/arm-linux-androideabi/4.6/include-fixed

#SDK根目录
PLATFROM_ROOT=$(NDK_ROOT)/platforms/android-14/arch-arm

#sdk头文件搜索路径
PLATFROM_INCLUDE=$(PLATFROM_ROOT)/usr/include

#sdk库文件搜索路径
PLATFROM_LIB=$(PLATFROM_ROOT)/usr/lib

#文件名称
MODALE_NAME=hello

#删除
RM=del

#编译选项
FLAGS=-I$(TOOLCHAINS_INCLUDE)       -I$(PLATFROM_INCLUDE)         -L$(PLATFROM_LIB)       -nostdlib       -lgcc       -Bdynamic       -lc

#所有obj文件
OBJS=$(MODALE_NAME).o      $(PLATFROM_LIB)/crtbegin_dynamic.o      $(PLATFROM_LIB)/crtend_android.o 

#编译器链接
all:
    $(TOOLCHAINS_PREFIX)-gcc $(FLAGS) -c $(MODALE_NAME).c -o $(MODALE_NAME).o
    $(TOOLCHAINS_PREFIX)-gcc $(FLAGS) $(OBJS) -o $(MODALE_NAME)

#删除所有.o文件
clean:
    $(RM) *.o

#安装程序到手机
install:
    adb push $(MODALE_NAME) /data/local/tmp
    adb shell chmod 755 /data/local/tmp/$(MODALE_NAME)
    adb shell /data/local/tmp/$(MODALE_NAME)

#运行程序
run:
    adb shell /data/local/tmp/$(MODALE_NAME) 

4. 使用make命令便可以编译程序

生成一个可以执行文件hello   一个目标文件hello.o

于是有编译NDK的命令:

// 编译目标文件
E:\Android\android-ndk-r10b/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/arm-linux-androideabi-gcc -IE:\Android\android-ndk-r10b/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/lib/gcc/arm-linux-androideabi/4.6/include-fixed -IE:\Android\android-ndk-r10b/platforms/android-14/arch-arm/usr/include -LE:\Android\android-ndk-r10b/platforms/android-14/arch-arm/usr/lib -nostdlib -lgcc -Bdynamic -lc -c hello.c -o hello.o

// 编译可以执行文件
E:\Android\android-ndk-r10b/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/arm-linux-androideabi-gcc -IE:\Android\android-ndk-r10b/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/lib/gcc/arm-linux-androideabi/4.6/include-fixed -IE:\Android\android-ndk-r10b/platforms/android-14/arch-arm/usr/include -LE:\Android\android-ndk-r10b/platforms/android-14/arch-arm/usr/lib -nostdlib -lgcc -Bdynamic -lc hello.o E:\Android\android-ndk-r10b/platforms/android-14/arch-arm/usr/lib/crtbegin_dynamic.o E:\Android\android-ndk-r10b/platforms/android-14/arch-arm/usr/lib/crtend_android.o  -o hello

5.运行程序

同样使用makefile即可

使用make install即可安装运行我们的程序

使用make run即可运行我们的程序

install和run 在makefile可以理解成自定义函数

我擦 为知笔记的代码着色到博客园不能用了

来自为知笔记(Wiz)

时间: 2024-10-17 22:05:56

纯手工编写NDK Hello World的相关文章

APICloud开发者进阶之路 |纯手工编写日程表功能

最近看论坛内关于极光推送的问题有很多,本想写一个关于极光的详细教程的,无奈已经有很多大牛分享过了,所以只得纯手工写了一个日程表,可以以周为单位左右切换,适用于医疗.教育等方向的app,先看下效果图. 再看一下代码截图 自动识别当前日期,并计算出本周的起始日期,通过左右按钮切换上一周和下一周,并同步更换日程,日程可点击激活高亮,至于激活显示什么样的内容你们自己根据实际功能要求处理吧. 原文地址:https://blog.51cto.com/9334358/2404941

一年纯手工打造的Java老A上册开始预售了

Java老A这本书写了很久,昨天终于开始在china-pub上开始预售了,其它网站可能会慢一点,不过既然叫预售,就肯定还没到货. 有兴趣的人可以去看看哈(后续其它网站地址也会在这里公开): http://search.china-pub.com/s/?key1=java%cc%d8%d6%d6%b1%f8&type=&pz=1 关于本书内容,请参考:http://blog.csdn.net/xieyuooo/article/details/38373409 里面有本书的所有目录信息,封面等

JAVA+PHP+阿里云组件纯手工实现POP、SMTP、IMAP开发邮件服务器(二)

java开发邮件服务器的接收模块 用java建立socket服务端,监听端口25,实现SMTP协议.即可完成邮件服务器的接收模块. 这里要注意的是,SMTP协议其实可以分为两种.一种是你用手机.PC等客户端发邮件到邮件服务商的服务器的时候用的SMTP协议,这一类是需要登录验证的.一种是邮件服务商之间传递邮件的SMTP协议,此类协议是不需要登录的.比如你用Foxmail上你的QQ邮箱发送了一封邮件到163的邮箱.过程是这样的: 邮件从Foxmail通过SMTP协议发送到QQ邮箱的服务器. QQ邮箱

【OpenGL】“我叫MT”纯手工3D动画制作之1——基础介绍

最近在家研习面经,温习基础,索性花些时间将本科期间完成的一些学习之作整理出来,分享之余顺便水点经验 其实这个事情起源于一门“计算机图形与动画(Computer Graphics & Animation)”的外方课程,当初的外籍教师Tony教的很认真,对于这门课自己也投入了非常多的时间.言归正传,这里先介绍一些涉及的技术,熟悉的同学请跳过哈~ A.几何物体建模 带阴影的后面我会介绍到的哦~ 加下划线的后面我后面会举栗子的哦~ B.涉及的图形学技术与应用 C.动画技术 参考文献 1.王汝传,张登银,

【OpenGL】“我叫MT”纯手工3D动画制作之2——建立模型

最近在家研习面经,温习基础,索性花些时间将本科期间完成的一些学习之作整理出来,分享之余顺便水点经验 其实这个事情起源于一门“计算机图形与动画(Computer Graphics & Animation)”的外方课程,当初的外籍教师Tony教的很认真,对于这门课自己也投入了非常多的时间.言归正传,这里先介绍一些涉及的技术,熟悉的同学请跳过哈~ D.准备工作 需要的相关库有: • QuickTime 7.7.1 for Windows (主要用于播放动画与配音) • QuickTime SDK (开

纯手工获取的WINDOWS 7 32位 SP1后续补丁集ver201509的官方下载地址

虽然不是纯手工咖啡,但是对于一个微软操作系统封装爱好者来说,纯手工获取的WINDOWS 7 32位 SP1后续补丁集ver201509的官方下载地址应该比手工咖啡更香醇. 下面是手工获取的补丁列表: 截至到20150920,以后有空闲时间的话可以每个月更新一次,只含WINDOWS 7 32位系统的重要补丁,不含可选补丁,不含IE 9,IE 10,IE 11补丁,不含netframe 4.52的补丁(这个有netframe 4.52本身安装包): Windows 7 Service Pack 1 

纯手工定制西服怎么鉴别

纯手工定制西服怎么鉴别_百度经验 纯手工定制西服怎么鉴别 浏览:91 | 更新:2013-07-01 17:43 定制西服一定要量身定制才行,有些商家的西服说是定制,不过只是量一下尺寸然后再用早就做好的号衣稍做改动去应付,这个定制的时间很短,真正的定制西服工期很长,中间还有试衣修改的时间,这些都是必不可少的环节,如果没有试衣修改,做出来的衣服很难做到完美合适,这个你要在去商家那里的时候一定要问清,最好是拿商家的衣服亲自检验一番. 下面我教大家几个小窍门,很容易就能检验出是不是量身定制西服,首先有

VBS脚本代码(手工编写)

'=========================================================================='' VBScript Source File -- Created with SAPIEN Technologies PrimalScript 4.1'' NAME: '' AUTHOR: Windows 用户 , AEBELL' DATE : 2014/7/7'' COMMENT: ''=============================

【转】纯手工玩转 Nginx 日志

Nginx 日志对于大部分人来说是个未被发掘的宝藏,总结之前做某日志分析系统的经验,和大家分享一下 Nginx 日志的纯手工分析方式. Nginx 日志相关配置有 2 个地方:access_log 和 log_format . 默认的格式: access_log /data/logs/nginx-access.log; log_format old '$remote_addr [$time_local] $status $request_time $body_bytes_sent ' '"$re