Articles of jni

如何dynamic更改Android NDK jni调用?

有些人正在使用NativeActivity专门用C ++处理Android项目,但这也有一些缺点,所以和其他人一样,我决定使用Java胶水代码; 只有一个Java文件包装了我需要的所有东西,从C ++,几乎所有的东西都在运行。 据说,就我所知,使用这个Java代码迫使我在Java中实现本地函数调用,Java调用一个在项目的C ++部分中实际调用的函数,使用JNI。 在C ++中,被调用的本地函数具有这样的原型: JNIEXPORT void Java_com_package_name_nativeTouchDown( JNIEnv* env, jobject thiz, jfloat x, jfloat y ); 我的问题是,我开始专门处理脚本,并希望find一种方法,不必重新编译C ++代码了。 所以当我想创建一个新项目时,我只需复制粘贴我的C ++编译代码,然后更改脚本,并允许在不进行任何重新编译的情况下更改应用的软件包名称。 这是可能的吗? 在我所处的地方,我只需要重新编译我的C ++以符合一个新的包名称(格式为com.company.game )。 我不能使C ++完全从这个包名抽象出来,或dynamic改变它?

Android NDK – 将.so文件从一个项目移动到另一个项目

我有一个我为Android编写的小项目,它使用了一小部分NDK / JNI代码。 我想在两个项目之间分享这个代码,但到目前为止,我运气不大。 首先,我试图将NDK特定的代码重构成一个库,我认为它链接到两个项目使用 'project-> java build path-> source-> link source' 并在那里指定本地库。 听起来不错,但是这是错误的。 我重构代码的项目仍然需要.so库文件 MyOriginalProject \库\ armeabi \ MyNativeLibrary.so 从原始项目中删除,但仍然链接重构库的源失败。 其次,创建一个新项目并试图使用我写的NDK库,包括库的来源和复制.so文件从“obj”和“libs”到新项目的根目录失败。 似乎过去了 的System.loadLibrary( “MyNativeLibrary”) 至less,它没有断言。 代码得到了我的第一个NDK调用,然后崩溃,而不被我的exception处理程序捕获。 任何提示都会受到欢迎 – 比如NDK加载库的万无一失的方法,典型的陷阱和NDKdebugging技术。 提前致谢, 蒂姆。

JNImultidimensional array作为返回值

我有一些C ++代码,我写的生成体素地形,并希望在JAVA中访问它。 你通过它三个整数; 种子和它正在生成的块的坐标(表示为int x和int y )。 它会返回一个表示该块中每个块的值的三维整数数组。 在Java中我有: private native static int [ ][ ][ ] genTerrain ( int seed , int x , int y ); 在生成的头文件中我有: #ifndef _Included_co_lambdas_koc_server_Terrain #define _Included_co_lambdas_koc_server_Terrain #ifdef __cplusplus extern "C" { #endif /* * Class: co_lambdas_koc_server_Terrain * Method: genTerrain * Signature: (III)[[[I */ JNIEXPORT jobjectArray JNICALL Java_co_lambdas_koc_server_Terrain_genTerrain (JNIEnv […]

在Android Studio的现有项目中导出UnityProject

我是Unity3D的新手,但是我用一个人形的gameobject制作了一个小型的Unity项目。 我可以移动这个人形与演示数据,但我想移动它与我已经在android应用程序内部的四元数据。 我已经在互联网上search,但每个人只是告诉我们必须为统一的android插件,这样我们可以使用JNI来发送或接收数据(我需要从Android访问C#脚本) 。 但是,我想导入android项目内部的统一项目,以便我可以(从android访问c#脚本,并发送四元数据到游戏对象的四元数variables,并使其移动)更改android应用程序并testing它即刻!! (另外我不需要在unity项目里做进一步的修改,但是我需要对android项目里的数据做进一步的改进)。 请帮忙,并提供一个Android工作室的指南。 谢谢。

将Openfeint集成到Cocos2d-x 0.12.0中的新方法

我正在尝试在我的cocos2d-x项目中实现Android的OpenFeint。 到目前为止,我的方法是创建一个button,使用jnihelper函数在类Bridge中调用静态Java方法(jnihelper只接受静态方法)。 Bridge有一个types为OFAndroid的单例属性,即dynamic调用Openfeint Api方法的类,并且桥中的每个方法都只是将它转发给OFAndroid对象。 我现在要做的是初始化调用静态C ++库的主java类中的openfeint库。 我现在的问题是初始化函数 void com.openfeint.api.OpenFeint.initialize(Context ctx, OpenFeintSettings settings, OpenFeintDelegate delegate) 不接受我给他的上下文参数,这是对这个主类的“这个”引用。 主类从Cocos2dxActivity扩展,但我没有任何其他扩展从应用程序。 任何关于修复它的建议或如何改善架构? 编辑: 我正在尝试新的解决scheme。 将Bridge类构造成一个Application子类,从Main对象调用,在创建时初始化OpenFeint,并且可以调用OpenFeint函数而不需要额外的类。 问题是我仍然得到错误。 03-30 14:39:22.661: E/AndroidRuntime(9029): Caused by: java.lang.NullPointerException 03-30 14:39:22.661: E/AndroidRuntime(9029): at android.content.ContextWrapper.getPackageManager(ContextWrapper.java:85) 03-30 14:39:22.661: E/AndroidRuntime(9029): at com.openfeint.internal.OpenFeintInternal.validateManifest(OpenFeintInternal.java:885) 03-30 14:39:22.661: E/AndroidRuntime(9029): at com.openfeint.internal.OpenFeintInternal.initializeWithoutLoggingIn(OpenFeintInternal.java:829) 03-30 14:39:22.661: E/AndroidRuntime(9029): at com.openfeint.internal.OpenFeintInternal.initialize(OpenFeintInternal.java:852) 03-30 14:39:22.661: E/AndroidRuntime(9029): at com.openfeint.api.OpenFeint.initialize(OpenFeint.java:47) 03-30 14:39:22.661: E/AndroidRuntime(9029): […]

如何从Unity代码传递接口到Java?

首先,让我说这是我第一次体验Unity,所以答案可能是在我的鼻子下。 我也在Unity的答案网站上发布了这个问题,但插件的问题似乎并不经常被回答。 我试图创建一个插件,允许我从我的游戏访问SDK。 我可以使用AndroidJavaObject调用SDK方法,我可以传递数据给他们没有问题。 但是有一些SDK方法需要传递一个接口。 例如,我的Java函数: public void attemptLogin(String username, String password, LoginListener listener); listener在哪里; 是一个callback接口。 我通常会从Java运行这样的代码: attemptLogin("username", "password", new LoginListener() { @Override public void onSuccess() { //Yay! do some stuff in the game } @Override public void onFailure(int error) { //Uh oh, find out what happened based on error } }); 有没有办法通过JNI / Unity传递一个C#接口到我的attemptLogin函数? […]

如何开发一个好的游戏项目?

我在C++和Java方面都有足够的经验,因为我一直在做很多工作。 就我而言,我的gradle计划是一场游戏(我还有将近8个月的时间)。 我已经拿下了它的基本思路,但是我仍然对如何实施整个项目感到不安。 在我看来,最好的方法是使用C ++实现的库来执行窗口处理和OpenGL渲染等低级操作,以及使用Java实现更多面向游戏的特性。 所以,基本上我是通过使用Java本地接口来从JVM执行引擎调用来创建带有C ++和与Java相关的任何与游戏相关的代码的游戏引擎。 这可以被认为是一个好主意,或者这是不好的?

Android – 使用opengles通过Java与C + +

我一直在教我自己的opengl,所以我可以在Android上做一个游戏。 然而,我一直在努力如何使用c / c ++在opengl中构建对象和场景,并将它们通过jni传递给android可以使用它们的虚拟机。 有人可以指点我一些教程,实际上显示使用本机构建的对象被创建并传递给jni。 我很好,使用C + +或Java我只是没有太多的经验,使用JNI。 我建立了一些示例项目,我传递像浮动原语,并在本机端执行操作,然后传回给他们,但我不知道如何在c ++中创建一个场景在opengl中,然后将其传递给java。 我一直在看编写所有使用Java的,但林不知道如果Java绑定会造成一些性能损失。 任何帮助将非常感激