您的位置:首页 > 其它

在NDK上建立自己的项目

2013-03-15 11:47 204 查看
文章来自: 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/jni

LOCAL_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.properties

android-ndk/apps/project_test/project $gvim
default.properties

#### default.properties ####

target=android-4

创建文件Application.mk

android-ndk/apps/project_test/ $gvim
Application.mk

#### Application.mk ####

APP_PROJECT_PATH := $(call my-dir)

APP_MODULES := main

4)编译project_test项目

~/android-ndk $make APP=project_test

5)输出查看

在apps/project_test/project/libs 目录里会有生成的 main.bin 文件

2.安装到android SDK中测试。

启动emulator模拟器

$./emulator

修改system目录的属性为可读写

$./adb remount

push到指定的目录

$./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 libtest

2) 进入项目目录新建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_H

void 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 libtest

3. 编译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 remount

push到指定的目录

$./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!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: