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

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

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

##NDK 环境配置:

选择 window -> preferences -> Android -> 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(如下图)即可。:

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

在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.genmakebuilder clean,full,incremental, …… org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder full,incremental, …… org.eclipse.cdt.core.cnature org.eclipse.cdt.core.ccnature org.eclipse.cdt.managedbuilder.core.managedBuildNature org.eclipse.cdt.managedbuilder.core.ScannerConfigNature
  3. 删除项目根目录下的.cproject文件
  4. 在ADT里打开或者导入原来的project, refresh,然后按照上文** CDT 配置(支持native编译)**中提到的方法重新设置工程支持native编译即可。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏mini188

学习笔记:Maven构造版本号的方法解决浏览器缓存问题

需要解决的问题   在做WEB系统开发时,为了提高性能会利用浏览器的缓存功能,其实即使不显式的申明缓存,现代的浏览器都会对静态文件(js、css、图片之类)缓存...

26490
来自专栏java一日一条

Web服务器、应用程序服务器、HTTP服务器区别

WEB服务器、应用程序服务器、HTTP服务器有何区别?IIS、Apache、Tomcat、Weblogic、WebSphere 都各属于哪种服务器?这些问题困惑...

86710
来自专栏翻译

在Ubuntu 14.04/14.10上搭建Minecraft Spigot服务器

本文介绍了如何在Ubuntu 14.04 / 14.10上搭建自己的Minecraft服务器,搭建一个让我们可以与朋友远程开黑的私服,甚至是搭建一个几百人的公共...

39530
来自专栏java一日一条

Java程序员最常用的8个Java日志框架

作为一名Java程序员,我们开发了很多Java应用程序,包括桌面应用、WEB应用以及移动应用。然而日志系统是一个成熟Java应用所必不可少的,在开发和调试阶段,...

21320
来自专栏云计算教程系列

如何在Ubuntu 14.04上设置Hexxit(Minecraft ModPack)服务器

Hexxit是一个Minecraft modpack,即Minecraft mods的集合。虽然原始游戏的根源在于自由形态的探索和建设,但Hexxit强调冒险和...

15710
来自专栏IT技术精选文摘

微服务架构中的进程间通信

介绍 在单体应用程序中,组件通过语言级的方法或函数调用进行彼此的调用。相比之下,基于微服务的应用程序是在多台机器上运行的分布式系统。每个服务实例通常是一个进程...

64250
来自专栏Linyb极客之路

下单接口调优实战,性能提高10倍

最近公司的下单接口有些慢,老板担心无法支撑双11,想让我优化一把,但是前提是不允许大改,因为下单接口太复杂了,如果改动太大,怕有风险。另外开发成本和测试成本也非...

8520
来自专栏喵了个咪的博客空间

PhalGo-ADM思想

#PhalGo-ADM思想 关于ADM思想主要是指在API开发中使用API,Domain和Model三层结构,PhalGo从PhalApi中学习并且推崇这种设计...

39490
来自专栏从流域到海域

在微服务之间进行通信

原文地址:https://dzone.com/articles/communicating-between-microservices

55650
来自专栏大数据平台TBDS

Hiveserver2 性能优化与GC优化

最近发现hiveserver2(本质上是提供jdbc连接的driver进程)经常发生严重卡死故障,而且卡死分成两种现象。

1.1K100

扫码关注云+社区

领取腾讯云代金券