草庐IT

android - 如何使用带有 Gradle 的 Android Studio 在 Android 上使用 NDK 从 C++ 构建静态库?

我有一个用C++编写的项目,我想构建一个静态库以便能够在其他项目中链接它。但是AndroidStudio和NDK只生成对我来说不可用的共享库对象(我需要静态对象)。我使用gradle插件来构建代码。当代码编译时,我找不到获取“libname.a”文件的方法。有人知道Gradle背后的魔法吗? 最佳答案 虽然对NDK不太熟悉,但Gradle支持构建原生静态库。您可以在C++withGradle中查看示例或在gradle用户指南NativeBinarieschapter中了解更多信息。 关于

Android Studio - App + NDK 模块库

在花费数小时寻找我的问题的解决方案并浏览各种论坛(包括这个论坛)之后,我终于决定提出我的问题,希望它没有在其他地方得到完整的回答。我正在尝试构建一个非常复杂的架构:我有在单独的静态库(.a)中编译的C源代码我在模块库中通过JNI使用它们我想在应用项目中使用这个库。我首先成功做了以下测试-我已经设法在没有NDK的情况下制作了一个模块库,并使用应用程序对其进行了编译。-我还设法在应用程序中直接使用静态库和JNI,但是我在以下步骤中失败了:-模块内部的JNI与调用模块类的应用程序的组合不起作用。我认为问题在于aar的包含,因为当aar位于库构建/输出目录中时,我无法在我的应用程序的构建目录中

android - 使用 c++_shared STL 将使用 ndk r10 构建的库链接到使用 ndk r13 构建的项目

我们有一个使用androidndkr10e构建的预构建库。我们正在进行的项目正在使用ndkr13b构建。当尝试链接库时,我们的构建失败并出现undefinedreference错误,因为库中包含ndkSTL提供的类(例如字符串)的所有函数。错误:Foo.cpp:39:undefinedreferenceto`namespaceFoo::Bar::fooBar(std::__ndk1::basic_string,std::__ndk1::allocator>const&)'我们也通过使用ndk13构建另一个库解决了这个问题。不幸的是,对于其中一个必要的库,它是我们无法控制的。我们将c++

android - 没有 NDK 的 OpenGL ES 2.0 可能吗?

我正在学习Android开发,特别是最终在它上面做OpengL2.0ES。到目前为止,我了解到NDK支持Opengl2.0ES。但是,是否也有针对它的JavaAPI?如果有JavaAPI,推荐哪一个?我知道C++和Java,所以如果我必须使用NDK没什么大不了的,但我更愿意尽可能只使用Java,并且不会对性能造成太大影响。 最佳答案 是的,您可以在Java中使用OpenGLES2.0,而无需接触NDK。这是关于在Android中启动OpenGLES2.0的官方文档:http://developer.android.com/resou

android NDK互斥锁定

我一直在将跨平台C++引擎移植到Android,并注意到它在调用pthread_mutex_lock时会莫名其妙地(且不一致地)阻塞。这个引擎已经在几个平台上运行了很多年,而且有问题的代码多年来没有改变,所以我怀疑这是一个死锁或其他错误代码。它必须是我的Android端口..到目前为止,代码中有几个地方阻塞了pthread_mutex_lock。它也不是完全可复制的。当它挂起时,LogCat中没有可疑的输出。我像这样修改了互斥锁代码(为简洁起见进行了编辑...真正的代码检查所有返回值):voidMutexCreate(Mutex*m){#ifdefWINDOWSInitializeCr

android - 使用 NDK 构建 Android openssl 无法正确生成 arm4 程序集文件

openssl是includedintheAndroidoperatingsystem,并且谷歌还在他们的构建中包含了一些arm4/thumb汇编程序代码(aes/asm/aes-armv4.s,bn/asm/armv4-mont.s,sha/asm/sha1-armv4-large.s,sha/asm/sha256-armv4.s、sha/asm/sha512-armv4.s)。我有theAndroidopensslbuilding与ndk-build但它只能使用纯Caes_core.c正确构建,而不是arm4文件。它甚至创建了.o文件,但找不到*.o.d.org文件,我不知道它们来

Android NDK 库 : findLibrary returned null

我正在尝试在Eclipse中构建一个中型项目。它由主应用程序项目和两个Android库组成。一切正常,直到我向主项目添加了一个非常简单的JNI库。当我在设备上运行应用程序时,我在LogCat中看到了这个异常:01-1117:19:01.421:E/AndroidRuntime(26569):atjava.lang.Runtime.loadLibrary(Runtime.java:429)Couldn'tloadxxx:findLibraryreturnednull我用谷歌搜索了类似的问题,我相信我做的一切都是正确的:唯一的.c文件和Android.mk文件放在'jni'文件夹中我使用n

java - Android NDK 是否为通过套接字发送大 int[] 提供加速?

我需要通过两个Android设备之间的套接字发送一个包含500,000个整数的数组。目前,我花了很多时间将int[]转换为byte[],以便Java的套接字可以接受它(请参阅我之前的问题Efficientlysendlargeint[]oversocketsinJava,我们确定没有更快的方法在Java中进行类型转换).我现在的问题是,如果我采用int[]并通过JNI将其传递给AndroidNDK,我是否可以期望在native代码中转换为byte[]的速度更快?我知道在普通的C中将int*类型转换为char*非常简单,但是我想知道JNI是否会抵消任何性能提升。此外,一旦我的native

android - 使用 NDK 编译会出现成功包含头文件的错误

我的应用程序.cpp:#include"app.h"#include#includevoidJava_com_geek_hello_FilterStack_nativeEglSetFenceAndWait(JNIEnv*env,jobjectthiz){EGLDisplaydisplay=eglGetCurrentDisplay();//Createaeglfenceandwaitforegltoreturnit.//Additionalreferenceoneglfencesynccanbefoundin://http://www.khronos.org/registry/vg/ex

android - NDK原生代码具体执行在哪里

我对Android应用程序中原生代码的生命周期有些困惑。我看到引用资料说native代码是在DalvikVM中执行的,但这是真的吗?我的印象是虚拟机只运行Dalvik字节码。另一方面,native代码使用从VM内部的Java调用的JNI。最后,使用NativeActivity有什么不同吗?我认为我对NDK的理解相当好,直到我坐下来尝试向自己解释它。我什至不确定我是否以明智的方式提出问题。 最佳答案 IhaveseenreferencesthatsaythatthenativecodeisexecutedinsidetheDalvik