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可以理解成自定義函數

 

我擦 為知筆記的代碼着色到博客園不能用了




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM