Articles of native

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 […]

Native Debug Android Studio

当我通过Genymotion运行Native调试时出现了这样的错误。 启动LLDB服务器:run-as org.cocos2dx.cpp_empty_test /data/data/org.cocos2dx.cpp_empty_test/lldb/bin/start_lldb_server.sh /data/data/org.cocos2dx.cpp_empty_test/lldb /data/data/org.cocos2dx.cpp_empty_test/lldb/tmp/platform.port1442313534865 “lldb进程:gdb-remote数据包” 现在启动本机调试会话 注意! 找不到符号目录 – 请检查您的本机调试配置 无法附加本机调试器:无效的URL:adb:// [169.254.67.102:5555]:46216 url无效:adb:// [169.254.67.102:5555]:46216 进程以退出代码0结束

如何在ANDROID应用程序中使用openSSL库

我正在尝试使用Android NDK在我的Android应用程序中嵌入openssl库,但我不知道如何使用该库,所以请任何人都可以告诉我如何使用它请发送源代码供我参考… …. 相关: 如何在Android / Linux上构建OpenSSL?