Articles of native

运行JNI android app A / libc时收到错误消息:0xdeadd00d(代码= 1)的致命信号11(SIGSEGV),线程17729

当我运行Android应用程序时,我遇到了一个错误,我使用了JNI函数和c ++代码。 当它运行时,我收到以下消息: 致命信号11(SIGSEGV)在0xe480001d(代码= 1),线程5465 最后这是我的代码: JNIEXPORT jstring JNICALL Java_ir_bassir_ndktest4_MainActivity_getName (JNIEnv *env, jobject obj){ jclass cls = (*env)->GetObjectClass(env, obj); jmethodID mid = (*env)->GetStaticMethodID(env, cls, “testJava”, “([Ljava/lang/String)[Ljava/lang/String”); jstring plainText = (*env)->NewStringUTF(env, “Hello from JNI ! Compiled with ABI 2222 “); jstring result = (*env)->CallStaticObjectMethod(env, cls, mid, plainText); return (*env)->NewStringUTF(env, plainText); } 在Java方面: public class MainActivity extends […]

JNI proguard混淆

我有混淆的问题。 为了更好的想象力: JAVA代码 class JniTest… public void test() { //some code } public void runJniCode() { //here I call native code } 本地代码 JNIEXPORT void JNICALL Java_path_to_class_test(JNIEnv* env, jobject obj) { //here I call test method from Java } 一切正常,直到我想发布一个混淆版本。 JniTest中的Java类(例如JniTest )和方法test的名称由proguard重命名为“a”和“a()”(这可能并不总是相同),但在本机代码中,方法的原始名称和类保持不变,因为它被硬编码为字符串,如: jmethodID mid = env->GetMethodID(cls, “test”, “someSignature”); …有没有办法动态设置方法名称?

Java JNI与Android NDK

有人可以解释一下Java JNI和Android NDK是如何不同的,它们是如何相同以及它们如何组合在一起的? 我没有发现任何可以很好地解释两者之间差异的东西,我有点困惑。 谢谢!

android错误动态加载libc ++。所以本机库

我正在尝试构建一个概念validationandroid应用程序,它使用OpenSSH代码与服务器建立SSH会话。 为此,我使用android源代码构建所需的库,然后将它们提升到AndroidStudio本机项目,其中所有内容都应该打包并安装在设备上。 但是,其中一个库(libc ++。so)无法在设备上动态加载消息“ java.lang.UnsatisfiedLinkError:dlopen failed:找不到符号”__register_atfork“由”libc ++。so“引用”… “ 加载libc ++时会抛出此错误。来自MainActivity java代码的库(我现在一次加载一个库以确定它失败的地方): public class MainActivity extends AppCompatListActivity implements OnHostStatusChangedListener { ………………. static { System.loadLibrary(“dl”); System.loadLibrary(“c”); System.loadLibrary(“m”); System.loadLibrary(“c++”); // <— Error dlopen failed: cannot locate symbol "__register_atfork" referenced by "libc++.so System.loadLibrary("ssh"); System.loadLibrary("vrx-native"); } …………. } 我对错误消息的解释是libc ++所需的符号__register_atfork。所以没有任何其他库定义。 但检查库符号表我不明白为什么dlopen无法识别在libc.so上定义的符号: $readelf -s libc++.so Symbol table ‘.dynsym’ contains 2367 entries: […]

Android gradle,用于不同架构的本机库

我正在尝试为所有架构构建通用 apk。 这是我的项目结构: -App -appModule -libraryModule -libs -armeabi -lib.so -src -java -jni 这是libraryModule的gradle文件: apply plugin: ‘com.android.library’ // http://stackoverflow.com/questions/28485309/how-to-build-single-apk-with-andoid-ndk-and-gradle android { compileSdkVersion 23 buildToolsVersion “23.0.2” defaultConfig { ndk { moduleName “ProxyResolver” // <– This is the name of AndroidProxy native module stl "gnustl_shared" cFlags "-std=c++11" abiFilters = ['armeabi'] ldLibs (projectDir.absolutePath + "/libs/armeabi/libresolver.so") } } sourceSets { […]

如何减少需要openCv lib的Android应用程序的apk大小(仅用于image processing)

我正在使用min SDK 15构建一个Android应用程序,该应用程序使用的是OpenCV库。问题是当我构建apk时,它的大小超过60 MB,这不是很好。 我检查了应用程序文件,由于amr64 , armeabi , mips , x86等所有架构中的amr64文件,我可以看到大小太大。 我只使用opneCv进行image processing。这个库有许多其他function,如video处理,3D图像,对象检测等等,我不需要在我的应用程序中像 如果我删除所有这些文件并构建APK,那么大小将减少50 MB,但为了使这个应用程序工作,我需要安装OpenCVManager来运行我的应用程序。 有什么方法可以减少我的apk大小? 或者只是从OpenCV提取我感兴趣的function并为这些function创建.so ?

在NativeActivity中创建OpenGL着色器

我已经调整了本机活动NDK示例以合并来自hello-gl2示例的OpenGL代码。 我处理APP_CMD_INIT_WINDOW消息,然后尝试创建着色器。 着色器创建失败,我尝试通过getShaderInfoiv获取信息,但是也会无声地失败。 所以我的问题是 – 如何在纯原生Android应用程序中创建OpenGL ES 2.0着色器? PS我知道如果使用Java GLSurfaceView并且不在正确的线程中创建它们,则着色器创建可能会失败,但是查看本机活动示例,它似乎只有一个线程!

UnsatisfiedLinkError Android

我们有这个加载本机库的应用程序,这个库提供了我们调用的本机方法。 在某些手机(特别是较慢的手机)上,这会导致问题。 每当(我认为)库仍在“加载”并且过早地调用方法时,就会发生UnsatisfiedLinkError。 有办法处理这个问题吗? 就像检查库是否已经加载一样。

创建包含外部(Native或Java)包的Android库包

我开发了一个计算机视觉算法的应用程序,它使用像OpenCV这样的Native C++库来捕获相机帧并进行image processing。 我的整个实现驻留在一个通过活动调用的本机函数中。 让我们说: public native int MYMETHOD(int width, int height,int[] rgba); 我也像这样加载我的库: static { System.loadLibrary(“MYNativeLIB”); } 现在我的问题是如何将我的应用程序部署为库包。 我可以共享的东西,客户可以将其导入到他们的项目而无需安装任何其他库,如OpenCV 。 我需要构建一个.so包吗? 我读过这篇文章。 但我不知道如何链接OpenCV库。 感谢您的帮助。

如何使用Native Activity? 它可以与传统活动相结合吗?

我有两个库(.so),我在java代码中加载。 但是,有一些特定的操作需要Java(Activity) C ++(。so files)调用。 我可以使用Native Activity来实现部分function吗? 原生活动是传统活动的补充,还是我必须选择,我将使用哪种types的活动? [编辑] 有一组事件可以通过本机活动在本机代码中处理 机器人-NDK /源/机器人/ native_app_glue / android_native_app_glue.h enum { /** * Command from main thread: the AInputQueue has changed. Upon processing * this command, android_app->inputQueue will be updated to the new queue * (or NULL). */ APP_CMD_INPUT_CHANGED, /** * Command from main thread: a new ANativeWindow is […]