原文网址:http://www.cnblogs.com/sardine/archive/2011/07/30/2121845.html
建立Android.mk文件
~/android-ndk/apps/project_test/project/jni $gvim Android.mk
#### Android.mk ###### 进入当前目录并取得当前目录的路径# 其结果为: ~/android-ndk/apps/project_test/project/jniLOCAL_PATH:= $(call my-dir)
# 清除全局变量include $(CLEAR_VARS)# 项目需要编译源文件列表LOCAL_SRC_FILES:= \main.cpp# 项目需要的.h头文件目录列表LOCAL_CFLAGS := # 项目需要的链接自编译出的.so 文件列表LOCAL_SHARED_LIBRARIES :=# 项目需要的链接非自编译出的.so 文件目录及列表LOCAL_LDLIBS := # 在执行此Android.mk 文件时,显示指定的变量信息# 此次则显示 LOCAL_SRC_FILE变量内容在控制台上$(info $(LOCAL_SRC_FILES))# 项目编译出输文件名LOCAL_MODULE:= main# 项目编译出输文件名,编译成哪种文件,# BUILD_EXECUTABLE 是指.bin二进制执行文件# BUILD_SHARED_LIBRARY 是指.so 动态库文件# BUILD_STATIC_LIBRARY 是指.a 静态库文件# 这里我们是生成二进制执行文件include $(BUILD_EXECUTABLE)3) 在java源码项目目录,android-ndk/apps/project_test/project/src创建文件 default.propertiesandroid-ndk/apps/project_test/project $gvim default.properties#### default.properties ####target=android-4创建文件Application.mkandroid-ndk/apps/project_test/ $gvim Application.mk#### Application.mk ####APP_PROJECT_PATH := $(call my-dir)APP_MODULES := main4)编译project_test项目~/android-ndk $make APP=project_test5)输出查看在apps/project_test/project/libs 目录里会有生成的 main.bin 文件2.安装到android SDK中测试。启动emulator模拟器 $./emulator修改system目录的属性为可读写 $./adb remountpush到指定的目录 $./adb push /out/system-bin/main.bin /system/bin运行: $./adb shell# chmod 777 /system/bin/main.bin# /system/bin/main.bin便可看到输出结果:test project OK!-------------------------------------------------------------------
在原有的project_test 项目中添加 SO 子项目
之前的 project_test 项目 请看<在NDK上建立第一个自己的项目>文档,在此主要描述如何增加自己的 SO项目。1. 建立自己SO的子项目。1) 先在项目project_test目录中新建子项目目录,如: libtest 目录~/android-ndk/apps/project_test/project/jni $mkdir libtest2) 进入项目目录新建C++ lib源码文件,如: libtest.cpp~/android-ndk/apps/project_test/project/jni $cd libtest~/android-ndk/apps/project_test/project/jni/libtest $gvim libtest.cpp/*--- libtest.cpp ---*/// libtest.cpp#include <stdio.h>void printlibtest(){ printf("libtest project OK!\n");}3) 建立头文件如: libtest.h~/android-ndk/apps/project_test/project/jni/libtest $gvim libtest.h/*--- libtest.h ---*/// libtest.h#ifndef GUILH_LIB_TEST_H #define GUILH_LIB_TEST_Hvoid printlibtest();#endif建立android-ndk/apps/project_test/project/jni/libtest/Android.mk文件~/android-ndk/apps/project_test/project/jni/libtest $gvim Android.mk### android-ndk/apps/project_test/project/jni/libtest/Android.mk #### 进入当前目录并取得当前目录的路径LOCAL_PATH:= $(call my-dir) # 清除NDK全局变量include $(CLEAR_VARS)# 项目需要编译源文件列表LOCAL_SRC_FILES:= \libtest.cpp# 项目需要的.h头文件目录列表LOCAL_CFLAGS :=# 项目需要的链接自编译出的.so 文件列表LOCAL_SHARED_LIBRARIES :=# 项目需要的链接非自编译出的.so 文件目录及列表LOCAL_LDLIBS :=# 在执行此Android.mk 文件时,显示指定的变量信息, 如无需显示则可在之前加“#”符号# 此次则显示 LOCAL_SRC_FILE变量内容在控制台上$(info $(LOCAL_SRC_FILES))# 项目编译出输文件名LOCAL_MODULE:= libtest# 项目编译出输文件名,编译成哪种文件,# BUILD_EXECUTABLE 是指.bin二进制执行文件# BUILD_SHARED_LIBRARY 是指.so 动态库文件# BUILD_STATIC_LIBRARY 是指.a 静态库文件# 这里我们是生成动态库文件include $( BUILD_SHARED_LIBRARY) 2. 修改原project_test 项目与 SO子项目进行连接1) 进入test子项目目录修改C++源码文件,如: main.cpp~/android-ndk/apps/project_test/project/jni $cd ../test~/android-ndk/apps/project_test/project/jni/test $gvim main.cpp
/*--- main.cpp ---*/// main.cpp#include <lib/libtest.h>int main(){ printlibtest();return 0;}2) 修改sources/project_test/test/Android.mk文件~/android-ndk/apps/project_test/project/jni/test $gvim Android.mk### sources/project_test/test/Android.mk #### 进入当前目录并取得当前目录的路径LOCAL_PATH:= $(call my-dir) # 清除NDK全局变量include $(CLEAR_VARS)# 项目需要编译源文件列表LOCAL_SRC_FILES:= \main.cpp# 项目需要的.h头文件目录列表LOCAL_CFLAGS := \-I$(LOCAL_PROJECT_PATH)# 项目需要的链接自编译出的.so 文件列表LOCAL_SHARED_LIBRARIES := \libtset# 项目需要的链接非自编译出的.so 文件目录及列表LOCAL_LDLIBS :=# 在执行此Android.mk 文件时,显示指定的变量信息, 如无需显示则可在之前加“#”符号# 此次则显示 LOCAL_SRC_FILE变量内容在控制台上$(info $(LOCAL_SRC_FILES))# 项目编译出输文件名LOCAL_MODULE:= main# 项目编译出输文件名,编译成哪种文件,# BUILD_EXECUTABLE 是指.bin二进制执行文件# BUILD_SHARED_LIBRARY 是指.so 动态库文件# BUILD_STATIC_LIBRARY 是指.a 静态库文件# 这里我们是生成动态库文件include $( BUILD_EXECUTABLE) 3) 修改文件apps/project_test/Application.mk $gvim Application.mk### apps/project_test/Application.mk ###APP_PROJECT_PATH := $(call my-dir)APP_MODULES := gmain.bin libtest3. 编译project_test项目~/android-ndk $make APP=project_test输出查看在~/android-ndk/apps/project_test/project/libs 目录里会有生成的main.bin与libtest.so文件4. 安装到android SDK中测试。启动emulator模拟器$./emulator修改system目录的属性为可读写 $./adb remountpush到指定的目录 $./adb push /out/system-bin/gmain.bin /system/bin $./adb push /out/system-lib/libtest.so /system/lib运行: $./adb shell# chmod 777 /system/bin/main.bin# /system/bin/main.bin便可看到输出结果:libtest project OK!