Tag: android ndk

Android OpenGL ES 2.0:GL_FLOAT纹理可以作为COLOR附件分配给FBO吗?

我想通过glReadPixels使用GL_FLOAT纹理获取值。 我的Android设备支持OES_texture_float 。 但是,附加GL_FLOAT纹理会出错。 在Android的OpenGL ES 2.0中,将GL_FLOAT纹理附加到FBO是不可能的? 还是要靠硬件? 我的部分代码是: 在里面: glGenTextures(1, &texture); glBindTexture(GL_TEXTURE_2D,texture); glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,texWidth,texHeight,0,GL_RGB,GL_FLOAT,NULL); FBO附件: glBindFramebuffer(GL_FRAMEBUFFER,framebuffer); glFramebufferTexture2D(GL_FRAMEBUFFER,GL_COLOR_ATTACHMENT0,GL_TEXTURE_2D,texture,0); checkGlError(“FBO Settings”); // glGetError() return 0x502. status = glCheckFramebufferStatus(GL_FRAMEBUFFER); // glCheckFramebufferStatus() return 0. 如果有人有一些见解我会贬低它。

JNI- unpinned primitve数组错误

我想在图像处理中实现反转效果。 我在java端解码颜色通道,我将2D数组传递给C端,我反转(255值)然后我返回一个处理过的2D数组。 这是我的C代码: #include #include #include #include JNIEXPORT jobjectArray JNICALL Java_com_example_invert_MainActivity_inv (JNIEnv *env, jobject obj, jobjectArray arr, jint w, jint h) { double a[w][h][3]; int i,j,k; double x = 0; ///////////////////READING THE INPUT ARRAY//////////////////////// jsize dim1 = (*env)->GetArrayLength(env, arr); for (i=0; iGetObjectArrayElement(env, arr, i); int dim2 = (*env)->GetArrayLength(env, line1); jdouble *pos1 = (*env)->GetDoubleArrayElements(env, line1, 0); […]

一旦安装了应用程序,Android原生库就会消失

切换到Android Studio后,我开始看到可怕的 java.lang.UnsatisfiedLinkError: dlopen failed: library ‘/data/app-lib/com.myapp.test-1/libmylib.so’ not found 错误。 当我解压缩apk时,我可以看到libmylib.so以及lib / armeabi文件夹下的所有其他本机库(libmyotherlib.so和libtest.so),所以打包不应该是问题…我决定root我的测试设备,并检查我的应用程序的文件夹/ data / app-lib下的实际内容,其中的本机库应该在安装后 – 我发现应用程序后我的应用程序的本机库之一(libmylib.so)丢失了安装在设备上。 libmylib.so和libmyotherlib.so是预先构建的.so文件放在src / main / jniLibs中,而libtest.so是从test.c在src / main / jni中编译的。 这只是在我切换到Android Studio后才开始的; 我已经validation了在Eclipse ADT中使用相同代码构建的apks在安装后在/data/app-lib/com.myapp.test-1下提供了所有必需的库。 Android Studio版本的相关build.gradle: apply plugin: ‘com.android.application’ android { compileSdkVersion 23 buildToolsVersion “21.1.2” defaultConfig { applicationId “com.myapp.test” minSdkVersion 17 targetSdkVersion 23 versionCode 1 versionName “1.0” ndk{ […]

JNI调用非静态函数段错误

我正在为Android的SDL库做一些工作,但我有一点障碍。 此函数在Java中定义: /** * This method is called by SDL using JNI. * @return an array which may be empty but is never null. */ public static int[] inputGetInputDeviceIds(int sources) { int[] ids = InputDevice.getDeviceIds(); int[] filtered = new int[ids.length]; int used = 0; for (int i = 0; i < ids.length; ++i) { InputDevice […]

Android 4.4和5.0中multithreading加速的效率完全不同

我写了一段C代码来在Android中进行一些图像处理(密集计算)(由NDK编译并由jni.h使用)。 为了加速图像处理,我在C代码中使用了pthread_create和pthread_join函数来利用4个线程同时处理图像。 multithreading加速在Android 4.4手机中是成功的,但在所有Android 5.0手机中都失败了。 假设在单线程环境中image_processing函数的处理时间是1s。 我们利用4个线程来加速image_processing函数,如下所示: void image_processing_multiply_threads() { int i; pthread_t pt[4]; for(i = 0 ; i < 4; i++) { if ( pthread_create(pt + i , NULL, image_processing, (void *)(arg + i)) != 0 ) { return; } } for (i = 0; i < 4; i++) { pthread_join(pt[i], NULL); } } […]

如何在我的共享库中包含使用libdvm.so的正确包含文件?

我想使用下面的API,它位于dalvik / vm / native / dalvik_system_DexFile.cpp: static void Dalvik_dalvik_system_DexFile_defineClass(const u4* args, JValue* pResult) static void Dalvik_dalvik_system_DexFile_openDexFile_bytearray(const u4* args, JValue* pResult) 但我不知道如何在libdvm.so中包含使用上述两个API的正确包含文件。 我试图在android项目中包含整个头文件,但它失败了这个编译错误消息:“参数列表太长”。 有人知道在libdvm.so中使用上面两个API需要做些什么吗? 谢谢。 – 添加 – 在dalvik / vm / native / dalvik_system_DexFile.cpp中,还有一些其他代码允许其他人使用静态API。 const DalvikNativeMethod dvm_dalvik_system_DexFile[] = { { “openDexFile”, “(Ljava/lang/String;Ljava/lang/String;I)I”, Dalvik_dalvik_system_DexFile_openDexFile }, { “openDexFile”, “([B)I”, Dalvik_dalvik_system_DexFile_openDexFile_bytearray }, { “closeDexFile”, “(I)V”, Dalvik_dalvik_system_DexFile_closeDexFile }, […]

Android NDK链接问题

我用NDK编译了Sox等人。 所以,我有所有Android友好的共享库。 我做了一个调用sox函数的简单测试文件 。 NDK构建告诉我: undefined reference to `sox_open_read’ sox_open_read在sox.h中定义。 我知道它找到了sox.h,因为它给了我一个关于该文件的警告: In file included from (…)/sox/sox.h:19 所以也许它想在实际的libsox.so中找到sox_open_read。 好吧,我已经尝试了大约100种不同的方法来告诉它sox共享库的位置 LOCAL_SHARED_LIBRARY := sox LOCAL_LDLIBS := -L$(LOCAL_PATH_FULL)/jni/libs/libsox.so 但是,如果我将Sox指定为静态库,它将起作用: #LOCAL_SHARED_LIBRARY := sox LOCAL_STATIC_LIBRARIES := sox LOCAL_LDLIBS := -L$(LOCAL_PATH_FULL)/jni/libs/libsox.so 这是我的理解,我不想静态链接到sox库 – 我想动态链接到它。

Android NDK OpenSSL错误交叉编译

我是NDK的新手,我正在按照本指南为Android构建OpenSSL,我正在使用Windows 7和Cygwin。 我在尝试构建OpenSSL库时遇到了错误。 # From the ‘root’ directory $ . ./setenv-android.sh $ cd openssl-1.0.1g/ $ perl -pi -e ‘s/install: all install_docs install_sw/install: install_docs install_sw/g’ Makefile.org $ ./config shared no-ssl2 no-ssl3 no-comp no-hw no-engine –openssldir=/usr/local/ssl/$ANDROID_API $ make depend $ make all 当我尝试make depend命令时,我有2个错误: cryptlib.c:171:3: error: #error “Inconsistency between crypto.h and cryptlib.c” # error “Inconsistency between crypto.h […]

如何在NDK上使用Android上的C函数

我想在Android应用程序中使用C语言编写的函数。 该function取自此处 。 我已经学会了android NDK的一些基础知识,我可以设法在我的Java源码中使用该函数,但是当我调用它时应用程序冻结,而不是等到android让我杀死应用程序。 JNI签名是这样的: JNIEXPORT void JNICALL Java_pda_lupa_callbacks_MySurfaceCallback_NativeYuv2rgb (JNIEnv *env, jclass clazz, jbyteArray imageIn, jint widthIn, jint heightIn, jobject imageOut, jint widthOut, jint heightOut) { jbyte *cImageIn = (*env)->GetByteArrayElements(env, imageIn, NULL); jbyte *cImageOut = (jbyte*)(*env)->GetDirectBufferAddress(env, imageOut); toRGB565((unsigned short*)cImageIn, widthIn, heightIn, (unsigned int*)cImageOut, widthOut, heightOut); (*env)->ReleaseByteArrayElements(env, imageIn, cImageIn, JNI_ABORT); } 然后我像这样在Java中加载它: static { System.loadLibrary(“rgb”); […]

Android无法在Android程序中使用Android.mk包含Linux

我正在尝试为Android 6编译一个C程序。这是我的Android.mk : APP_PLATFORM := android-23 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) # Enable PIE manually. Will get reset on $(CLEAR_VARS). This # is what enabling PIE translates to behind the scenes. LOCAL_CFLAGS += -fPIE -DHAVE_FANOTIFY=1 -DHAVE_SYS_FANOTIFY=0 LOCAL_LDFLAGS += -fPIE -pie # give module name LOCAL_MODULE := fsmon # list your C files to compile […]