【转】NDK上建立自己的项目
原文网址: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!
【转】NDK上建立自己的项目的更多相关文章
- Linux上安装git并在gitlab上建立对应的项目
1.CentOS上面安装git我所用的CentOS为CentOS6.5,其他版本没有测试. yum install git 安装之后查看git版本信息 git --version 2.配置git信息g ...
- 分布式版本库——Windows下Git的环境部署以及在GitHub上开源自己的项目
分布式版本库--Windows下Git的环境部署以及在GitHub上开源自己的项目 这几天着实忙的焦头烂额,可惜不是搞技术,今天周日,难得闲下来,写篇大家都想学习的Git教程,其实廖雪峰老师的网站已经 ...
- 关于指针要注意的地方还有尝试在codeblocks上建立项目
1.字符串: char a[]="house"; char *b="house"; a[2]='r';可以 b[2]='r'不可以,因为这个指针变量指的是字 ...
- 关于如何在Android、Java等非微软平台上建立高信任的SharePoint应用程序
关于如何在非微软平台上建立高信任的SharePoint应用程序 原文 :http://blogs.msdn.com/b/kaevans/archive/2014/07/14/high-trust-sh ...
- Entity Framwork(EF) 7——在现在数据库的甚而上开发MVC 新项目
一.开发背景: 由于老系统已经无法满足实际业务需求,需在现有数据库的甚而上开发新的项目. 二.困难点: 而EF默认情况下是要删除现有数据库表格后重新创建,这是不允许的.当你创建数据库对象时系统会提示“ ...
- 第二章——建立一个HelloWorld项目,练习使用git的add/commit/push/pull/fetch/clone等基本命令。比较项目的新旧版本的差别-----答题者:徐潇瑞
1.首先下载安装git,很简单所以就不详细说了,当弹出一个类似的命令窗口的东西,就说明Git安装成功 2.因为Git是分布式版本控制系统,所以需要填写用户名和邮箱作为一个标识 3.接着,注册githu ...
- QT在ui文件上建立信号操机制会不会对后期维护产生影响 - love4Mario的专栏 - 博客频道 - CSDN.NETQT在ui文件上建立信号操机制会不会对后期维护产生影响 - love4Mario的专栏 - 博客频道 - CSDN.NET
QT在ui文件上建立信号操机制会不会对后期维护产生影响 - love4Mario的专栏 - 博客频道 - CSDN.NET QT在ui文件上建立信号操机制会不会对后期维护产生影响 分类: 学习心得 2 ...
- 【IDEA】【8】上传已有项目到Git
问题:开发初期没有建立GIT仓库,开发一段时间后,需要将已有代码上传到Git 解决方案: 1,首先使用Git命令行 git clone XXXXX.git 将项目下载 2,拷贝下载下来的项目根目录下的 ...
- 在giuhub上演示自己的项目
首先在github上建立项目,然后git clone; 然后切换分支到 git checkout gh-pages 最后提交代码到这个分支上,访问地址:[github用户名].github.io/[项 ...
随机推荐
- 安装Nuget上常用的包的命令
起因: Nuget图形化操作界面各种卡顿,或者有时干脆就连不上了.所以用命令还是很必须的. 常用命令: 安装 Entity Framework : PM> Install-Package Ent ...
- ExtJs 4.2.1 复选框数据项动态加载(更新一下)
最近在做博客项目,后台管理用的是ExtJs4.2.1版本,因为是初学所以在使用的时候也遇到不少的这样或那样的问题,也写了不少这方面的博客,今天要写的博客是关于复选框数据项动态的加载功能,以前也没用过, ...
- Sublime Text 3 安装及简单配置
Sublime Text 3, 一款不错的文本编辑器, 加上各种插件和IDE就能化身各种语言的编译器, 界面以及多种插件的灵活组合搭配更是让程序员们在码代码这种枯燥的生活中增加一点调剂. 下载地址 点 ...
- wordpress换域名后无法登陆的解决方案
第一步:登录到你的数据库管理页面,找到wp_options表: 第二步:将表中的siteurl和home字段的值修改为当前的新域名,siteurl值的修改和home值的修改同理.如下图:
- ionic修改loading背景色
.loading{ background-color: #387ef5 !important; } 只需要在自定义css文件中设置即可
- 超简单的卸载ORACLE 11g
本机环境 win10 64位 找到安装目录下的 F:\app\Shuai\product\11.2.0\dbhome_1 按键盘d找到deinstall文件夹进入 管理员运行deinstall.bat ...
- 【线段树/数学/扩展欧几里得】 Bzoj 3913:奇数国
Description 在一片美丽的大陆上有100000个国家,记为1到100000.这里经济发达,有数不尽的账房,并且每个国家有一个银行.某大公司的领袖在这100000个银行开户时都存了3大洋,他惜 ...
- PAT-乙级-1041. 考试座位号(15)
1041. 考试座位号(15) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 每个PAT考生在参加考试时都会被分 ...
- <转>struts2中Convention中的basePackage与locators配置种种
用了Convention插件来实现所谓的0配置, 1. struts.convention.package.locators.basePackage=com.ZTest.web.action 这个属性 ...
- UIWebView和UIWebViewDelegate的基本用法
UIWebView和UIWebViewDelegate的基本用法 一.UIWebView主要有三种方法实现页面的装载,分别是: 1. (void)loadRequest:(NSURLRequest * ...