NDK学习三: 纯手工编译Hello World

 
1.配置环境变量
添加make工具path环境变量:

E:Androidandroid-ndk-r10bprebuiltwindows-x86_64in


 
 
2.编写Hello World
新建hello.c
#include <stdio.h>

int main(int argc, char* argv[])
{
  printf("Hello Android!
");
  return 0;
}
3.编写makefile文件如下
#ndk根目录
NDK_ROOT=E:Androidandroid-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:Androidandroid-ndk-r10b/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/arm-linux-androideabi-gcc -IE:Androidandroid-ndk-r10b/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/lib/gcc/arm-linux-androideabi/4.6/include-fixed -IE:Androidandroid-ndk-r10b/platforms/android-14/arch-arm/usr/include -LE:Androidandroid-ndk-r10b/platforms/android-14/arch-arm/usr/lib -nostdlib -lgcc -Bdynamic -lc -c hello.c -o hello.o

// 编译可以执行文件
E:Androidandroid-ndk-r10b/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/arm-linux-androideabi-gcc -IE:Androidandroid-ndk-r10b/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/lib/gcc/arm-linux-androideabi/4.6/include-fixed -IE:Androidandroid-ndk-r10b/platforms/android-14/arch-arm/usr/include -LE:Androidandroid-ndk-r10b/platforms/android-14/arch-arm/usr/lib -nostdlib -lgcc -Bdynamic -lc hello.o E:Androidandroid-ndk-r10b/platforms/android-14/arch-arm/usr/lib/crtbegin_dynamic.o E:Androidandroid-ndk-r10b/platforms/android-14/arch-arm/usr/lib/crtend_android.o  -o hello
 
5.运行程序
同样使用makefile即可

 
使用make install即可安装运行我们的程序
使用make run即可运行我们的程序
 
install和run 在makefile可以理解成自定义函数

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



原文地址:https://www.cnblogs.com/bingghost/p/5721423.html