zoukankan      html  css  js  c++  java
  • ndk eclipse集成

    1、安装cygwin时,要选择autoconf2.1 、 automake1.10 、 binutils 、 gcc-core 、 gcc4-core 、 gdb 、 pcre 、 pcre-devel 、 GNU awk这几项,可以在这个界面输入以上的信息搜索。然后点next,网址选163那个比较快。如果安装失败的话,需要卸载干净,要不还会失败。

     

    2、集成eclipse时  location:               D:cygwininash.exe

                         workingdirectory:  D:cygwinin

              Agruments:        --login -c "cd /cygdrive/d/myworkspace/space2/MyFirstJNI/jni && $NDK/ndk-build"

        d/myworkspace/space2/MyFirstJNI/jni是我工程空间中的项目MyFirstJNI中的jni文件夹的路径;$NDK/ndk-build就是在前面的目录下面执行编译生成.so文件

    3、我安装cygwin时,编译不了c++是因为我电脑上已经安装了minGW;

     

    虽然网上的有很多资料,我参考了下面的,感觉这个比较好,这个文章后面的jni的例子说的不好,可以参考前面的ndk的文章:

    一、 Android NDK r5安装

    1、 cygwin的安装和简单配置

    ① 首先到http://www.cygwin.com下载setup.exe ,接着建立安装目录,如X:cygwin (我用的是 E:cygwin ) ,将setup.exe放到此目录。

    ② 启动安装:

    BEGIN-> 点击setup.exe:

    ③ Next->选Install from Internet(选择在线安装方式):

    ④ Next->填写Root Directory,如X:cygwin(选择安装路径):

    ⑤ Next->填写Local Package Directory,如X:cygwinftp(选择下载文件存放的目录):

    ⑥ Next->选Direct Connection(选择网络连接方式):

    ⑦ Next->选一个较快的ftp(选择下载镜像站点):

    ⑧ Next->(开始下载安装):

    ⑨ 到了关键步骤,如果仅想安装基本系统,直接Next;如果想完全安装,点击 All旁边的旋转状图标,将Default切换至Install;如果仅想在命令行下写写程序,则只要将gcc、make等开发工具选上,还有openssh等(一般选择: autoconf2.1 、 automake1.10 、 binutils 、 gcc-core 、 gcc4-core 、 gdb 、 pcre 、 pcre-devel 、 GNU awk );选好后,Next->:

    ⑩ 选择需不需要创建快捷方式。->END

    最后启动Cygwin,测试安装是否成功:

    点击快捷方式或X:cygwincygwin.bat打开控制台,如果是域用户,按照提示makepasswd和makegroup即可。

    输入命令检查

    出现以上版本信息则表明make 和gcc 已经安装成功。

    2、 Android NDK r5 Windows

    ① 首先到官网下载 Android NDK r5 Windows

    ② android-ndk-r5直接解压就行了,我的路径是E:Android_NDK

    ③ 在home<你的用户名>.bash_profile 文件中最后添加环境变量 :打开E:cygwinetcskel目录,找到 .bash_profile 文件 ,拷贝到 home<你的用户名> (此处为E:cygwinhomeAdministrator)下面,在 最后添加环境变量

    NDK=/cygdrive/<你的盘符>/

    export NDK

    我的:NDK=/cygdrive/E/Android_NDK/android-ndk-r5

    export NDK

    其中"NDK"这个名字随便起,因为后面要用经常使用,建议不要太长。

    重启cygwin,输入cd $NDK进入对应目录,就成功了。

    注意:添加时用UltraEdit打开添加,如果是中文OS 使用记事本或者写字板打开编辑后,重新启动Cygwin 会报错。可以按照下图方式转换:

     
     
    二、 JNI实例

    1、 安装成功后编译NDK中的一个例子命令行:

    编译完成后在E:Android_NDKandroid-ndk-r5sampleshello-gl2文件夹中会生成一个文件夹libs,里面有一个子文件夹armeabi,里面生成libgl2jni.so文件 。

    2、 一个简单的JNI例子

    下面用一个简单的例子介绍怎么生成一个.so文件以及在Android项目中怎么调用.so文件。

    1. package com.cn.lhq;     
    2. import android.app.Activity;     
    3. import android.os.Bundle;     
    4. import android.widget.TextView;     
    5. public class JniTest extends Activity {     
    6. /** Called when the activity is first created. */    
    7. @Override    
    8. public void onCreate(Bundle savedInstanceState) {     
    9. super.onCreate(savedInstanceState);     
    10. // setContentView(R.layout.main);     
    11. TextView tv = new TextView(this);     
    12. tv.setText(stringFromJNI());     
    13. setContentView(tv);     
    14. }     
    15. public native String stringFromJNI();     
    16. static {     
    17. System.loadLibrary("MyFirstJNI");     
    18. }     

    ① 首先,用Eclipse建立一个ANDROID的工程,命名为MyFirstJNI,工程代码为:

    ② 制作生成.so文件: 可以通过获取以.h文件 来 获取函数申明。打开命令行,键入cd (这个路径是使用Eclipse建立的工程目录的src的路径 ,我的是F:workspaceMyFirstJNIsrc ),目的是设置工程目录。然后键 入: javah -jni com.cn.lhq.JniTest,结果如果失败,那就是因为没有把MyFirst.class文件拷贝到 F:workspaceMyFirstJNIsrc com cnlhq 之下,原因是Eclipse的文件管理机制会将.class文件和.java文件分开到不同的目录,解决方法是将F:workspaceMyFirstJNIincomcnlhq的所有.class文件都拷贝到他的目录下面。再次运行javah -jni com.cn.lhq.JniTest即可。然后就可以看到在 F:workspaceMyFirstJNIsrc 下多出了一个文件:com_cn_lhq_JniTest.h,通过这个文件,我们就知道了本地接口的函数名,于是我们就根据函数名写一个com_cn_lhq_JniTest.c文件, 代码如下:

    1. #include <string.h>     
    2. #include <jni.h>     
    3. jstring     
    4. Java_com_cn_lhq_JniTest_stringFromJNI( JNIEnv* env,     
    5. jobject thiz )     
    6. {     
    7. return (*env)->NewStringUTF(env, "Hello from JNI !");     

    注意 : 这个函数的参数与用javah生成出来的参数是不同的,这里只是需要函数名而已,因为函数名必须匹配,否则在模拟器上面跑的时候会出错,当然,如果对JNI命名规则熟悉的话可以跳过javah这步,直接写一个.c文件。

    写好.c文件之后就开始生成 .so 文件了,这时候需要 用到 ANDROID.MK这个文件。于是把Eclipse生成的工程目录剪切,放到NDK目录的samples目录之下 (和示例hello-gl2一样),这个时候模仿hello-gl2文件层次结构,将MyFirstJNI文件也做成那样 :在MyFirstJNI文件夹下面新建一个 jni文件夹,把 com_cn_lhq_JniTest.c 剪切到此文件夹中,同时也拷贝一个 ANDROID.MK 文件到此文件夹,用 UltraEdit打开 ANDROID.MK 文件进行修改,主要修改如下:

    LOCAL_MODULE := 工程名

    LOCAL_SRC_FILES := .c的文件名(包含扩展名)

    此例子应改为:

    LOCAL_MODULE := MyFirstJNI

    LOCAL_SRC_FILES := com_cn_lhq_JniTest.c

    然后 打开 cygwin, 进入 E:Android_NDKandroid-ndk-r5samplesMyFirstJNIjni目录:

    再 输入$NDK/ndk-build命令,在E:Android_NDKandroid-ndk-r5samplesMyFirstJNI生成libs文件夹,即生成.so文件:

    ③ 在eclipse中重新导入生成了.so文件的 MyFirstJNI项目,运行效果图如下:

  • 相关阅读:
    android彻底结束进程的两种方法
    清理软件缓存
    android webview 设置
    创建和使用Android library工程
    如何使Android应用程序获得root权限
    自动安装mysql5.7shell脚本实现与ansible脚本实现
    老生常谈:Asp.net Mvc 3 加载cshtml文件创建自定义分页
    老生常谈: Asp.net Mvc3 加载cshtml文件自定义分页+ 查询
    Razor API翻译
    Asp.net MVC 3使用 Area 小结
  • 原文地址:https://www.cnblogs.com/Anzhongliu/p/6092020.html
Copyright © 2011-2022 走看看