zoukankan      html  css  js  c++  java
  • eclipse里配置Android ndk环境,用eclipse编译.so文件

    做Android NDK开发时,c代码需要用ndk-build来进行编译,而java代码则需要用Android sdk编译。

    编译c代码有两种方法:

    一、写好c代码后,然后用cygwin搭建ndk-build环境,用ndk-build来编译出相关的.so文件(libs目录)之后,

    再用eclipse里去编译java程序,从而使用.so文件。该方法在上一篇搭建NDK环境有介绍。

    二、利用eclipse完全可以达到编译.so的目的。

    首先,先装上CDT吧,这是Eclipse的C/C++环境插件,装上它后你就可以在Eclipse里创建C/C++项目和代码文件了。插件的安装有两种方式,一种是在线安装,一种是下载安装包自己安装,这里只介绍第一种方式,另一种方式可自行百度。首先登录http://www.eclipse.org/cdt/downloads.php,找到对应你Eclipse版本的CDT插件的在线安装地址,如下图所示:,找到对应你Eclipse版本的CDT插件的在线安装地址,如下图所示:

    2、找到对应你eclipse版本的CDT插件地址,之后打开Eclipse,点Help菜单,找到Install New Software菜单,注意一些老版本的Eclipse菜单不太一样,比如说Europa的版本,就是Help--Software Updates—Find and Install--Search for new features to install--New Remote Site,除了菜单不太一样外,安装方式都差不多,可自行百度一下,下图以Indigo版本为准:

    3、把取的地址填进去,出来插件列表后,选Select All,如下图所示:

    然后狂点下一步即可完成安装。

    也可以点击Add按钮用离线方法安装。出现该对话框,点击Archive按钮,选择之前下载的离线安装包,安装过程同在线安装。

    4、安装完成后,点菜单File-New-Project,出现新建项目界面,如果出现了C/C++项目,那么恭喜你,CDT安装也完成了,如下图所示:

    5、 不过光有CDT还不行,CDT编译代码还是需要调用cygwin当中的编译工具进行,所以我们还需要手动配置C/C++的编译器,还是以NDK自带的hello-jni为例子,首先打开Eclipse,File->New->Project->Android->Android project->next,在New Android Project选项卡中,选Create project from existing source;在Location:按Browse找到NDK自带的Hello-jni目录。

    选择Android SDK版本后,点击Finish,完成导入。

    6、 把这个项目导入进来,导入后如下图所示:

    7、 编译C文件:

    右键单击HelloJni之后,点击Properties,弹出配置界面,之后再点击Builders,如下图所示:

    点击New按钮,新添加一个编译器,点击后出现添加界面,选择Program,点击OK:

    8、 点击OK后,出现了添加界面:

    在Main Tab界面, 填充以下内容:
    Name:

    编译器名称,随便填写。如:NDK_Builder

    Location:

    可执行工具的位置。即NDK安装目录下ndk-build.cmd的位置。

    你可以点击Browser File System...按钮选择Android NDK安装目录下的ndk-build.cmd文件来指定Location。如下图:

    你也可以设置一个变量来指定Android NDK的安装目录后设置Location。点击Variables按钮指定。如下图:

    出现选择Variable的选择框。

    单击Edit Variables...按钮。出现Variable管理的界面。单击New按钮添加Variable。

    输入Variable的名称,如:ndk_home。然后单击Browse...按钮,选择Android NDK的安装目录后,单击OK。

    至此,NDK的Variable设置完成。

    然后,单击Main Tab界面上Location的Variables...按钮,选择刚才设置的ndk_home变量。如下图:

    单击OK后,在Location的编辑框里会有选择的ndk-home变量,在其后面添加上/ndk-build.cmd,OK,Location设置完成。

    如下图:


    Working Directory:

    要编译的C/C++程序的工作目录。一般指定到jni文件夹,因为所有的C/C++程序都在该文件夹内实现。

    首先选择Working Directory里的Browse Workspace...按钮,如下图:

    然后,选择要编译的项目HelloJni的jni文件夹。

    9、 接着切换到Refresh选项卡,给Refresh resources upon completion打上钩,选择The Project containing the selected resource项,

    表示只更新包含选中资源的项目,选中的资源项就是Main Tab选择的jni文件夹。

    完成后如下图:

    10、 最后切换到Build Options选项卡,勾选During auto builds,如下图所示:

    Specify Resources 按钮单击后,选择HelloJni项目的 jni 文件夹。

    11、单击 Apply OK 确认设置后,确保此 NDK 构建工具设置为列表中的第一个条目,方法是选择 Up 按钮,直到其位于 Builders 列表的顶部

    记得一定要点Up按钮,把它排到第一位,否则C代码的编译晚于Java代码的编译,会造成你的C代码要编译两次才能看到最新的修改,排到第一位后如下图所示:

    12、 现在再次恭喜你,编译配置也配置完成啦,那么来试试看是否可以自动编译吧,打开左侧jni目录里的hello-jni.c文件把提示Hello from JNI!改改,如下图所示:

    单击项目,选择Build Project后,在HelloJni项目下会多出libs文件夹,.so文件就存放在这里。

    另外在Console控制台会输出成功编译的提示信息。

    编译之后点击run按钮跑起来看看吧,如果模拟器当中出现了你新修改的提示信息,那么再一次恭喜你,已经全部配置成功了!

    ========================================================================

    Android NDK: Your APP_BUILD_SCRIPT points to an unknown file:

    我的报错信息如下:

    Android NDK: Your APP_BUILD_SCRIPT points to an unknown file: D:Androidworkspace/jni/Android.mk    
    D:/Android/adt-bundle-windows-x86_64-20130917/android-ndk-r9/build/core/add-application.mk:176: *** Android NDK: Aborting...    .  Stop.

    很明显,是路径找不到的问题;

    一般情况,因为添加Builder时,我们指定的WorkDirctory为workspace所在的路径,这时候Environment中的NDK_PROJECT_PATH也会默认为这个值,只要修改NDK_PROJECT_PATH,是其值指向具体的工作空间下的项目;

    如果能出现这个问题,建议先使用进入cmd,然后使用命令行的方式cd 到你的workspace/yourproject;然后运行ndk-build命令;成功的话会输出以下信息:

    这种情况说明系统的环境变量配置是没有问题的,只是eclipse的环境变量配置有问题;解决如下:

    1.选中要编译的项目->Properties->Builders; 选中自己为NDK配置的那个Builder,我的叫NDKBuilder;然后选中,Edit,选择Environment选择项卡;加一项NDK_PROJECT_PATH, 值为 你的workspace下的project所在的路径:

  • 相关阅读:
    [APM] OneAPM 云监控部署与试用体验
    Elastic Stack 安装
    xBIM 综合使用案例与 ASP.NET MVC 集成(一)
    JQuery DataTables Selected Row
    力导向图Demo
    WPF ViewModelLocator
    Syncfusion SfDataGrid 导出Excel
    HTML Table to Json
    .net core 2.0 虚拟目录下载 Android Apk 等文件
    在BootStrap的modal中使用Select2
  • 原文地址:https://www.cnblogs.com/xunbu7/p/6833283.html
Copyright © 2011-2022 走看看