一.安装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动态库的更多相关文章

  1. Android NDK开发及调用标准linux动态库.so文件

    源:Android NDK开发及调用标准linux动态库.so文件 预备知识及环境搭建 1.NDK(native development Kit)原生开发工具包,用来快速开发C.C++动态库,并能自动 ...

  2. Android Studio下导出jar包和aar包

    Android Studio下导出jar包和aar包 jar包和aar包的区别 步骤 1. 创建Android工程 创建工程比较简单,不错复述 2. 创建一个Library(Module) 创建了一个 ...

  3. [Android Pro] AndroidStudio导出jar包

    reference :  http://blog.csdn.net/beijingshi1/article/details/38681281 不像在Eclipse,可以直接导出jar包.Android ...

  4. 关于Android开发中导出jar包后的资源使用问题解决

    我们经常遇到一个需求,就是给别人使用我们工程的时候,为了能够屏蔽代码,把代码封装成jar包提供给第三方使用,但是这样我们的资源文件怎么给对方用呢? 其实并不用这么的复杂,下面就介绍一下具体的方法 一, ...

  5. Android Android Studio 如何导出 Jar 给 Unity 使用

    大致步骤如下: 1.创建新的 Android Studio 工程 2.为此 Android Studio 工程创建 Android Library 类库(也就是一个 Module)(后面就是用它生成 ...

  6. android NDK 使用(多个)静态库生成动态库

    android NDK 使用(多个)静态库生成动态库. 1.编写Android.mk文件:如下两种方式都可以,用于NDK编译工具生成的两个.a文件来生成最终的libtwolib-second.so动态 ...

  7. NDK学习笔记-使用现有so动态库

    前面将的都是如何使用C/C++文件生成so动态库,那么在使用别人的so动态库的时候应该怎么做呢?这篇文章就是使用一个变声功能的动态库,完成对于以有so动态库的说明. 动态库来源 在互联网中,有着许许多 ...

  8. Android.mk中引用第3方动态库

    Android.mk 文件内容: LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE_TAGS := optional LOC ...

  9. Android项目编译和使用C语言动态库(so库)

    编译SO库 1.新建工程,建立jni目录用于放置c语言相关文件 2.编写Android.mk文件 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) ...

随机推荐

  1. matlab画图:设置y轴位置,使y轴在x轴的中间

    sigmoid函数图像 x=-10:0.1:10;  y=sigmf(x,[1 0]);  plot(x,y) 画出的图像如下所示: 怎么将Y轴放在中间呢,而不是在左边? 即如何得到这种效果呢? 方法 ...

  2. StreamReader和StreamWriter中文乱码问题

    StreamReader和StreamWriter中文乱码问题 1.写入: string  FilePath = @"E:\Measure.csv"; StreamWriter w ...

  3. simhash和minhash实现理解

    文本相似度算法 minhash minhash 1. 把文档A分词形成分词向量L 2. 使用K个hash函数,然后每个hash将L里面的分词分别进行hash,然后得到K个被hash过的集合 3. 分别 ...

  4. HDU 1250 Hat's Fibonacci(高精度)

    Problem Description A Fibonacci sequence is calculated by adding the previous two members the sequen ...

  5. M2迭代分数分配

    M2中仍然依据每个成员的工作量,贡献度分配相应得分. 成员 得分 申开亮 25 王皓南 24 许晋 21 黄玉冰 20 王宇杰 18 吴润凡 17 巴丹益昔 15

  6. lintcode-160-寻找旋转排序数组中的最小值 II

    160-寻找旋转排序数组中的最小值 II 假设一个旋转排序的数组其起始位置是未知的(比如0 1 2 4 5 6 7 可能变成是4 5 6 7 0 1 2). 你需要找到其中最小的元素. 数组中可能存在 ...

  7. LintCode-379.将数组重新排序以构造最小值

    将数组重新排序以构造最小值 给定一个整数数组,请将其重新排序,以构造最小值. 注意事项 The result may be very large, so you need to return a st ...

  8. Debian实验机 常用命令

    1.开启中文输入法 fcitx 2. 开启无线连接 wicd 3. 远程连接 ssh root@XXX.XXX.XXX.XXX 4. 启动Ulipad ~/ulipad-master# python ...

  9. C# HttpWebRequest post提交数据,提交对象

    1.客户端方法 //属于客户端 //要向URL Post的方法 public void PostResponse() { HttpWebRequest req = (HttpWebRequest)Ht ...

  10. 【Linux】- Ubuntu守护进程supervisor

    linux的守护进程类似于windows的服务.linux通过supervisor创建守护进程. 1.安装supervisor sudo apt-get install supervisor 安装成功 ...