Eclipse集成Android NDK及导出Jar和so动态库
一.安装Cygwin
在Windows环境而又不想使用linux环境,可以安装cygwin(http://www.cygwin.com/ ),为了使用gcc注意cygwin的必选安装包在devel目录下:binutils,gcc,make。
选择与Devel与Shells一起安装
安装完成以后,运行cygwin的快捷方式,在控制台输入命令 gcc和make,有合理的反馈即可
cygwin里面增加环境变量,修改C:\cygwin\etc\profile文件
增加/cygdrive/d/Android/android-ndk-r10e后
PATH="/usr/local/bin:/usr/bin:/cygdrive/d/Android/android-ndk-r10e:${PATH}"
二.开始集成
运行Eclipse,新建一个android project,取名HelloJni(名字随意)。
手动创建一个jni目录
Libs目录一会会自动创建,现在木有也没关系。
obj是临时文件夹,如果修改了jni下的C代码,编译前最好将其删除.

如果你现在运行这个工程,就会在android控制台看到如下错误:
java.lang.UnsatisfiedLinkError: Library HelloJni not found
因为你还没有造出那个libHelloJni.so出来。
工程属性
打开hello-jni工程属性,选择builder,New… , 选择program,点OK

配置如下,名字随便取一个(如NDK_Builder),location和working directory要和你的cygwin目录一致,arguments要和你的工程目录一致。
Location:
C:\cygwin\bin\bash.exe:
working directory
C:\cygwin\bin
Arguments
--login -c "cd /cygdrive/e/AndroidWorkspace/HelloJni && /cygdrive/d/Android/android-ndk-r10e/ndk-build

然后勾选其他配置如下


注意在勾选Specify working set of relevant resources时指定资源选择你的工程的jni目录即可。
当以上步骤都正确配置无误,保存配置后应该就会自动编译jni目录下的C相关代码并输出相应的.so库文件到工程的libs目录下,libs目录会自动创建。
编译时控制台输出类似如下:
[armeabi] Cygwin : Generating dependency file converter script
[armeabi] Compile thumb : HelloJni <= StrUtil.c
[armeabi] SharedLibrary : libHelloJni.so
[armeabi] Install : libHelloJni.so => libs/armeabi/libHelloJni.so
再运行工程,结果正确。
以后修改了C代码,保存后也会自动触发编译,省时省力。
三.打包jar文件
Eclipse中选择工程,右击选择 Export->java->JAR file, NEXT按钮,然后选择需要打包入jar的.java,.class文件,注意在"Select the export destination:"下面,点击Browe...按钮,选择保存的路径及文件名,点击Finish按钮好可.
四.将jar及so整合到别的应用中
Eclipse中选择待整合工程,右击, 选择 Properties -> Java Build Path -> Libraries, 点击 Add External JARs ..., 然后选择已经打包的.jar文件.也可以将jar直接放到libs目录下.
Native C/C++ 的动态库.so文件, 分arm 和 x86 两种,在APK的工程里添加目录libs, 然后建立两个子目录armabi 和x86,将.so文件放到对应的目录中即可.
Eclipse集成Android NDK及导出Jar和so动态库的更多相关文章
- Android NDK开发及调用标准linux动态库.so文件
源:Android NDK开发及调用标准linux动态库.so文件 预备知识及环境搭建 1.NDK(native development Kit)原生开发工具包,用来快速开发C.C++动态库,并能自动 ...
- Android Studio下导出jar包和aar包
Android Studio下导出jar包和aar包 jar包和aar包的区别 步骤 1. 创建Android工程 创建工程比较简单,不错复述 2. 创建一个Library(Module) 创建了一个 ...
- [Android Pro] AndroidStudio导出jar包
reference : http://blog.csdn.net/beijingshi1/article/details/38681281 不像在Eclipse,可以直接导出jar包.Android ...
- 关于Android开发中导出jar包后的资源使用问题解决
我们经常遇到一个需求,就是给别人使用我们工程的时候,为了能够屏蔽代码,把代码封装成jar包提供给第三方使用,但是这样我们的资源文件怎么给对方用呢? 其实并不用这么的复杂,下面就介绍一下具体的方法 一, ...
- Android Android Studio 如何导出 Jar 给 Unity 使用
大致步骤如下: 1.创建新的 Android Studio 工程 2.为此 Android Studio 工程创建 Android Library 类库(也就是一个 Module)(后面就是用它生成 ...
- android NDK 使用(多个)静态库生成动态库
android NDK 使用(多个)静态库生成动态库. 1.编写Android.mk文件:如下两种方式都可以,用于NDK编译工具生成的两个.a文件来生成最终的libtwolib-second.so动态 ...
- NDK学习笔记-使用现有so动态库
前面将的都是如何使用C/C++文件生成so动态库,那么在使用别人的so动态库的时候应该怎么做呢?这篇文章就是使用一个变声功能的动态库,完成对于以有so动态库的说明. 动态库来源 在互联网中,有着许许多 ...
- Android.mk中引用第3方动态库
Android.mk 文件内容: LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE_TAGS := optional LOC ...
- Android项目编译和使用C语言动态库(so库)
编译SO库 1.新建工程,建立jni目录用于放置c语言相关文件 2.编写Android.mk文件 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) ...
随机推荐
- Shell 常用命令、基本用法总结
Filter Filter 常用于从大量文本.数据中提取需求的部分.下面介绍几个常用的 filter 命令. cut $ cut -c 5-8 textfile.txt # 切出 textfile.t ...
- [C++] Fucntions
Statements A break statements terminate the nearest wile, do while, for or switch statement. A break ...
- BZOJ 1503 郁闷的出纳员(平衡树)(NOI 2004)
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1503 Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作 ...
- 小程序的picker的range 是一个 Object Array (对象数组)
小程序的picker的range 是一个 Object Array (对象数组) 数据: array: [{'id':1,'name':'Android'},{'id':2,'name':'IOS'} ...
- coding.net 版本控制
这是版本测试的所有内容,其中用到了 git 和coding的远程连接. 代码及版本控制 git地址:https://git.coding.net/tianjiping/11111.git
- Spring学习(三)—— 自动装配案例分析
Spring_Autowiring collaborators 在Spring3.2.2中自动装配类型,分别为:no(default)(不采用自动装配).byName,byType,construct ...
- 总结Canvas和SVG的区别
参考链接: 菜鸟教程 HTML5 内联SVG 经典面试题(讨论canvas与svg的区别) Canvas SVG 通过 JavaScript 来绘制 2D 图形 是一种使用 XML 描述 2D 图形的 ...
- Swift-闭包理解
/* 闭包(Closures) * 闭包是自包含的功能代码块,可以在代码中使用或者用来作为参数传值. * 在Swift中的闭包与C.OC中的blocks和其它编程语言(如Python)中的lambda ...
- 转 Redis集群技术及Codis实践
转 Redis集群技术及Codis实践 转自 :http://blog.51cto.com/navyaijm/1637688 codis开源地址:https://github.com/CodisLa ...
- CSS 经典三列布局
一 圣杯布局 1 html结构 <!DOCTYPE html> <html> <head> <title></title> <link ...