8

Android中关于Nativa编译(NDK、JNI)的一些问题

 3 years ago
source link: https://blog.bihe0832.com/android_Nativa_NDK_JNI.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
Android中关于Nativa编译(NDK、JNI)的一些问题 | 子勰的博客

做SDK也有一段时间了,SDK底层是用java写的,早期也只提供java层的接口。后来游戏接入越来越多,而且大多数游戏使用C++或者各种游戏殷勤,为了降低游戏接入的成本,同时也尽可能减少SDK开发的成本,SDK为游戏提供了native的方法。

SDK的C++接口由JNI实现,使用SDK的C++接口的游戏在集成时,SDK直接向游戏游戏提供源码编译,因此需要使用NDK完成编译。在编译和环境配置过程中经常会遇到一些问题,在此总结一下。

##NDK 环境配置:

选择 window -> preferences -> Android -> NDK,按照下图配置

NDK配置

备注:在最新的adt版本(adt-bundle-windows-x86-20140702)中没有集成ndk,游戏在Android选项中可能无法看到上述配置。解决方法如下:

  1. 下载eclipse关于ndk的插件com.android.ide.eclipse.ndk_23.0.2.1259578.jar
  2. 将下载好的com.android.ide.eclipse.ndk_23.0.2.1259578.jar 放入adt目录下的 \eclipse\plugins中,重启eclipse。

ADT 配置(支持native编译)

使用ADT自带的Android Tools 完成配置(推荐):

ADT中已经整合了关于CDT编译的相关内容。当需要工程支持native编译的时候,只需要选择工程->右键->properties->Android Tools -> Add Native Support(如下图)即可。:

CDT配置

这时选择工程->右键->properties->可以看到已经在配置中多了C++相关的配置,同时工程的builder里面也增加了native编译相关的配置。如下图:

CDT配置

在Builder中手动增加native的支持

对于不是使用ADT的环境,或者其他原因无法使用上面的方法配置的。也可以直接手动去配置natave的编译。具体方法可以参照下面的博客:

http://blog.csdn.net/yanzi1225627/article/details/16897877

个人亲测可用,配置以后同样可以支持native的编译,只是配置过程会相对繁琐。

解决ADT在native编译报错“Unresolved inclusion jni.h”

开发过程中有时候会遇到其无法处理inclusion导致symbol显示错误,出现类似“Unresolved inclusion jni.h”的错误。最好的解决办法就是初始化ADT对该project的native support:

  1. 在ADT中关闭或者删除指定Project
  2. 用其他编辑工具打开该project的.project文件,删除以下内容: …… org.eclipse.cdt.managedbuilder.core.genmakebuilderclean,full,incremental,org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilderfull,incremental,org.eclipse.cdt.core.cnatureorg.eclipse.cdt.core.ccnatureorg.eclipse.cdt.managedbuilder.core.managedBuildNatureorg.eclipse.cdt.managedbuilder.core.ScannerConfigNature
  3. 删除项目根目录下的.cproject文件
  4. 在ADT里打开或者导入原来的project, refresh,然后按照上文** CDT 配置(支持native编译)**中提到的方法重新设置工程支持native编译即可。



Recommend

  • 13
    • quangelab.com 3 years ago
    • Cache

    NDK在mac上的安装

    NDK在mac上的安装 – ruquan.z – github技术博客,成长在于积累。 ruquan.z github技术博客,成长在于积累。

  • 16
    • naclyen.com 3 years ago
    • Cache

    Unity – JDK/SDK/NDK path issue

    Unity 2019.2.4f1Windows 10 (1909) A JDK path needs to be specified for the Android build. Go to Preferences > External Tools > JDK to set it....

  • 6
    • floooh.github.io 3 years ago
    • Cache

    cmake and the Android NDK

    cmake and the Android NDK Apr 20, 2014 • Andre Weissflog TL;DR: how to build Android NDK applications with cmake instead of the custom NDK build system, this is useful for projects which already use cmake to cr...

  • 4
    • yuanfentiank789.github.io 3 years ago
    • Cache

    NDK crash栈信息的错误定位

    Android NDK是什么,为什么我们要用NDK? Android NDK 是在SDK前面又加上了“原生”二字,即Native Development Kit,因此又被Google称为“NDK”。众所周知,Android程序运行在Dalvik虚拟机中,NDK允许用户使用类似C / C++之类的原生代码语言执行部分程序...

  • 8
    • yuanfentiank789.github.io 3 years ago
    • Cache

    如何定位Android NDK开发中遇到的错误法

    如何定位Android NDK开发中遇到的错误 Android NDK是什么,为什么我们要用NDK? Android NDK 是在SDK前面又加上了“原生”二字,即Native Development Kit,因此又被Google称为“NDK”。众所周知,Android程序运行在Dalvik虚拟机中,NDK允许用...

  • 5
    • www.androidchina.net 3 years ago
    • Cache

    Android:JNI 与 NDK到底是什么

    在Android开发中,使用 NDK开发的需求正逐渐增大 但很多人却搞不懂 JNI 与 NDK 到底是怎么回事 今天,我将先介绍JNI 与 NDK & 之间的区别,手把手...

  • 5

    AndroidStudio2.0搭建Ndk环境&成功编译使用 – Android开发中文站你的位置:Android开发中文站 > Android开发 >

  • 8

    关于 .NET 与 JAVA 在 JIT 编译上的一些差异 最近因为公司的一些原因,我...

  • 6
    • blog.rust-lang.org 1 year ago
    • Cache

    Updating the Android NDK in Rust 1.68

    Updating the Android NDK in Rust 1.68 Jan. 9, 2023 · Android Platform Team We are pleased to announce that Android platform support in Rust will be modernized...

  • 6

    在Android开发中,有时候出于安全,性能,代码共用的考虑,需要使用C/C++编写的库。虽然在现代化工具链的支持下,这个工作的难度已经大大降低,但是毕竟万事开头难,初学者往往还是会遇到很多不可预测的问题。本篇就是基于此背景下写的一份简陋指南,希望能对刚开始编...

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK