Articles of android ndk

写在JNI Android中的stdout? 没有

我已经更改了android ndk的HelloJni示例,我想写一些东西到stdout。 这是Jni代码: #include #include #include jstring Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env, jobject thiz ) { printf(“Hello from C !\n”); return (*env)->NewStringUTF(env, “Hello from JNI !”); } 这是我的日志: 09-28 13:07:02.906: I/ActivityManager(1650): START {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.example.hellojni/.HelloJni u=0} from pid 1790 09-28 13:07:03.007: D/dalvikvm(1650): GC_FOR_ALLOC freed 687K, 10% free 9300K/10247K, paused 62ms, total 62ms 09-28 13:07:03.070: D/dalvikvm(3562): Not […]

在Android应用程序中嵌入v8

我想为我的Android应用程序添加一些脚本支持。 我的应用程序不是基于Web的,它只是一个用Java编写的常见应用程序。 我需要选择脚本语言及其解释器实现来嵌入。 至于语言,我更喜欢JavaScript(或者更好地说ECMAScript),因为它没有任何与用户交互的内置东西(我的意思是打印smth等),这正是我需要的(我只是想添加一个几个函数和/或对象与我的一些应用程序的逻辑交互)。 另一个原因是我对Python的经验很少,并且对Ruby,Lua和其他人没有任何帮助,而且就我所知,更多人熟悉JavaScript。 我的应用程序中的用户脚本应该非常小,并且不会经常执行,这就是脚本引擎速度无关紧要的原因。 重要的主要标准是解释器引擎隐含的额外二进制apk大小。 它应该尽可能小。 理想情况下,几十公斤左右,在任何情况下都不超过150-200Kb(当然是在ProGuard之后)。 我不需要全面的语言支持,例如,如果没有正则expression式,我将非常高兴。 另一个重要的事情是引擎的内存消耗(但它不那么重要,然后是二进制大小)。 我知道(从https://stackoverflow.com/a/11973689/52607和使用V8 JavaScript引擎来执行没有webview的JS lib )现代Android设备已经拥有v8 JavaScript引擎。 但我无法弄清楚,如何使用它(没有在我的应用程序中嵌入副本)。 根据soulseekah的第一个链接答案,我可以使用ndk链接到libwebcore.so。 但是v8有C ++,而不是C API,并且所有名称都被破坏了。所以阻止链接器find它们。 我设法从源代码编译我自己的v8副本并通过ndk在我的应用程序中使用它,但结果.so是17Mb(!!!),这远非可接受。 所以我的问题是,如何通过NDK或其他方式使用安装了Android设备的v8(在真正拥有它的设备上)? 或者,如果不可能,是否有其他脚本引擎(用于JavaScript或其他语言),满足我的二进制大小要求? 或者可能是v8有一些技巧,它允许使它的尺寸更小(可能是以速度为代价或某些语言function支持)?

使用gnustl分发NDK库?

我正在为Android开发一个既有Java又有Native组件的库。 Native库依赖于GNU STL。 我正在连接gnustl_static ,但遇到了一些奇怪的问题,这些问题是通过链接gnustl_shared解决的。 (例如, 文件系统和语言环境的问题)。 目前,我已经确定了gnustl_shared 。 这就是问题所在 – 我的库的消费者希望链接到Native .so以添加他们自己的代码。 我从阅读中了解到所有的C运行时必须匹配。 要求我的客户使用gnustl_shared似乎可能不起作用(就外交和易于集成而言) 如果我使用gnustl_shared构建,生成的JAR文件包含libgnustl_shared.so ,这会导致构建APK的问题也依赖于此库。 – 我想我可以不把它包含在JAR文件中? 如果我针对gnustl_static构建,我会避免所有这些问题吗? 如果我的API包含对STL对象的引用(主要是std::string和std::vector ),如果我的客户端不使用GNU STL,我会遇到问题吗? 谢谢

如何将原生android代码添加到LibGDX?

我想为我的Android应用编写本机代码。 我按照本教程将CPP文件添加到我的项目中。 它编译,但它与LibGDX冲突。 如何将其与LibGDX结合使用? 我想知道如何添加一个简单的CPP文件,其中一个函数将从我的Android游戏中调用。 我正在使用Android Studio。 当我将jni路径添加到我的Android gradle时,LibGDX停止工作: sourceSets { main { jni.srcDirs = ‘cppsrc’ jniLibs.srcDirs = [‘libs’] } }

Android NDK静态库调试(合并项目?)

我正在寻找一种更好的方法来调试我正在研究的具有非常大的NDK核心的大型项目。 NDK代码由一个大的C / C ++静态库组成,然后通过NDK代码将其链接到主Android应用程序。 该项目的NDK部分本身也在一个android库项目中。 所以总共制作了三个项目(Android – > NDK glue项目 – > Native C lib) 我的理解是,在尝试与库项目交互时,NDK调试工作不佳(或根本不工作)。 我怀疑我可以将NDK胶水代码项目与主要的android项目合并,而且痛苦相对较小,但更大的问题是包含项目核心的C / C ++项目。 有没有可行的方法来合并C / C ++项目和Android NDK项目,而无需重写C ++ / C项目的构建/生成脚本? 静态库的当前构建脚本非常复杂,可能很难转换为Android.mk文件。 有没有更好的方法可以做到这一点,我没有考虑过?

如何使用NDK工具编译带源代码的库?

如何用源代码编译库? 我正在使用android ndk开发本机库。 有时我从logcat获得崩溃转储消息。 06-18 15:24:58.545: INFO/DEBUG(24667): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 06-18 15:24:58.545: INFO/DEBUG(24667): Build fingerprint: ‘nvidia/harmony/harmony/harmony:2.2/FRF91/20110304.134348:eng/test-keys’ 06-18 15:24:58.545: INFO/DEBUG(24667): pid: 25870, tid: 26261 >>> com.andtv <<< 06-18 15:24:58.545: INFO/DEBUG(24667): signal 11 (SIGSEGV), fault addr 4a7b041c 06-18 15:24:58.545: INFO/DEBUG(24667): r0 4a7b041c r1 4a75220c […]

还有其他适用于Android的GIF创建库吗?

我真的很想知道是否有更好的GIF文件创建库用于Android开发。 我已经尝试过这个以及一个名为gifflen的NDK(它显然很老)。 我发现两者都很慢并产生低色彩量的GIF,文件大小非常大,质量设置似乎没有做任何事情。 最糟糕的是我可以自己写这个东西,但是如果有人知道现有的那个会节省很多麻烦,提前谢谢。

在Android NDK中使用简单的c ++类

我正在尝试学习Android NDK的基础知识,但是当我必须将它与c ++类一起使用时,我就陷入了困境。 我理解如何使用一个简单的函数,但我该怎么做才能操作c ++类的字段和方法? 我正在尝试使用这个简单的c ++类: #include #include using namespace std; class Point { int x, y; // coordonnées du point public: Point() { this->x = 0; this->y = 0; } Point(int x, int y) { this->x = x; this->y = y; } int getX() const { return x; } int getY() const { […]

Android NDK:使用libtool库

使用autotools创建以下库: Makefile.am: lib_LTLIBRARIES = libandi.la libandi_la_SOURCES = $(SMILE_SOURCES) libandi_la_CPPFLAGS = $(SMILE_CPPFLAGS) libandi_la_LIBADD = $(SMILE_LIBS) libandi_la_LDFLAGS = -no-undefined /////////////////////////////////////////////////////////////////////////// /////////This will be gone since I want to use libandi in android project /////////////////////////////////////////////////////////////////////////// bin_PROGRAMS = AndiExtract AndiExtract_SOURCES = src/AndiExtract.cpp AndiExtract_CPPFLAGS = $(Andi_CPPFLAGS) AndiExtract_LDADD = $(Andi_LIBS) -libandi –>I need this linker in android ////////////////////////// /////////////////////////////////////////////////////////////////////////// 我可以用android ndk编译它,所以这不是问题。 […]

JNI Android jbytearray到unsigned char *和反之亦然

我有2个单独的pthread和一个静态struct数组。 其中一个pthread写入解码对象,包括字节,大小,宽度和高度。 另一个pthread实际上正在读取堆栈并进行一些image processing并将结果发布到java函数中。 这是问题,在pthread1上我将jbytearray转换为unsigned char *,并存储到静态数组上的位置0。 但是当pthread2将其转换回jbytearray时会发生一些事情并且我总是会发出致命的信号。 这是我的cpp类的顶部 struct DecodeObject { unsigned char* data; int data_size; int width; int height; int orientation; }; static int decodeLimit = 200 ; static DecodeObject decodeList[200] ; static int decodeSize = -1 ; 这是我的pthread1的一部分 //Values jbyteArray imageData = (jbyteArray) env->CallObjectMethod(decodeObject,getData); jint width = (jint) env->CallIntMethod(decodeObject,getWidth); jint height = […]