zoukankan      html  css  js  c++  java
  • 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:cygwinetcprofile文件

    增加/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:cygwininash.exe:

    working directory

    C:cygwinin

    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文件放到对应的目录中即可.

  • 相关阅读:
    MYSQL架构和Innodb存储引擎
    MySQL基础
    ConcurrentHashMap
    线程池
    并发包(JUC)之阻塞队列
    并发包(JUC)之Condition、CountDownLatch
    并发包(JUC)之Lock和AQS
    volatile关键字——数据可见性问题
    对象锁——synchronized关键字
    获取ip
  • 原文地址:https://www.cnblogs.com/diysoul/p/5073714.html
Copyright © 2011-2022 走看看