Tag: JNI

JNI getObjectClass使VM崩溃

我试图做一个事情,C ++通过JNI记录到Java端。 到目前为止,我有一个本地的制定者: public native void setLogger(Logger logger); 我用C ++实现的: void __stdcall Java_setLogger(JNIEnv* env, jobject, jobject loggerInstance) { logger = Logger(env, &loggerInstance); } Logger类的构造函数如下所示: Logger::Logger(JNIEnv* env, jobject* loggerInstance) { this->env = env; this->loggerInstance = *loggerInstance; } 当我尝试通过提供的记录器实例(来自Java)上的JNI调用java方法时,它会使虚拟机崩溃。 我不知道为什么,因为这是从其他stackoverflow问题拼凑在一起。 void Logger::debug(const std::string code, const std::string message) const { std::cout << "debug!" <GetObjectClass(loggerInstance); std::cout << "class retrieved" […]

Kotlin原生界面

Kotlin是否使用了与Java相同的本地接口实现? 是否像在Java(对象传输的成本,字节流等)一样高效(或低效)?

Kotlin / Native是否可用?

Kotlin / Native是Kotlin的JNI API吗? 它将只用于C的互操作性吗?还是它构造了用Kotlin编写纯本地代码? 原生操作是否与JNI调用相同?

JNI GetShortArrayElements失败,SIGSEGV SEGV_ACCERR

我在托管代码中创建了一个缓冲区: var nativeBuffer = ShortArray(bufferSize) 这是Kotlin代码,但是根据stdlib文档 ,这个语法实际上是一个返回short []的包装器。 然后我想使用JNI从C ++写入这个缓冲区: JNIEXPORT void JNICALL Java_package_class_name_readNext (JNIEnv * env, jclass clazz, jshortArray javaArray) { jboolean * isCopy; short * targetArray = env->GetShortArrayElements(javaArray, isCopy); // Do stuff to targetArray } 问题是GetShortArrayElements调用总是导致崩溃,并使用以下逻辑删除: 11-07 21:23:53.610 86-86/? I/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** […]

对于使用Kotlin的方法,jmethodID为NULL

即使方法存在,我正在使用本机库,并有以下例外。 我有一个nativeInit函数也被导出到MapController,并按预期工作。 但是,nativeLoadScene方法会导致错误。 JNI DETECTED ERROR IN APPLICATION: jmethodID was NULL in call to CallObjectMethodV from int com.demo.lib.MyController.nativeLoadScene(long, java.lang.String, java.lang.String[]) JNI方法 JNIEXPORT jint JNICALL Java_com_demo_lib_MyController_nativeInit(JNIEnv *jniEnv, jobject obj, jobject tangramInstance, jobject assetManager) { … } JNIEXPORT jint JNICALL Java_com_demo_lib_MyController_nativeLoadScene(JNIEnv* jniEnv, jobject obj, jlong mapPtr, jstring path, jobjectArray updateStrings) { … } com.demo.lib.MyController.kt companion object { […]

Java JNI如何与Kotlin / Native交互来查找对象值?

从JetBrains网站: Kotlin / Native是一种将Kotlin编译为没有任何VM的本机二进制文件的技术。 但是Kotlin如何与JNI进行交互,据我所知,如果一个使用JNI的C / C ++程序想要访问一个Java字段,那么它必须使用GetFieldID函数,但是C程序需要来自描述该对象及其值的JVM的信息。 kotlin / Native如何解决字段的值,如果Kotlin使程序不依赖于VM,它如何获得Java字段的值?

如何使用productflavors和jni来设置Android库模块

我想包括mupdf作为一个预编译的.so二进制文件到我的项目的Android库模块。 我有一个应用程序模块,其中包括我的库模块。 dependencies { compile project(':mupdf') } 在我的mupdf库模块中,我有我编译的二进制文件。 mupdf – jniLibs – arm64-v8a libmupdf.so – armeabi libmupdf.so – armeabi-v7a libmupdf.so – x86 libmupdf.so – x86_64 libmupdf.so 我的mupdf库项目的build.gradle: apply plugin: 'com.android.library' apply plugin: 'kotlin-android' android { compileSdkVersion 23 buildToolsVersion "23.0.1" defaultConfig { minSdkVersion 15 targetSdkVersion 23 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled […]

JNI:直接缓冲区读写

我有一个小的JNI方法来从屏幕上检索一个像素。 该方法接收来自Java的ByteBuffer,并根据这个问题在C ++ 中写入如何写入和读取从bytebuffer从java传递到jni 。 虽然这个工作,我注意到我写的第一个字节是不正确的,但其他人是: 输入长度从000000000239F238开始为3 颜色是202,97,79 值在Java读取:-54,97,79 这是我的程序的输出。 C ++代码: JNIEXPORT void JNICALL Java_capturePixel(JNIEnv * env, jobject clz, jobject buffer) { jbyte* bufferStart = static_cast<jbyte*>(env->GetDirectBufferAddress(buffer)); jlong inputLength = env->GetDirectBufferCapacity(buffer); HDC hScreenDC = GetDC(nullptr); std::cout << "Input length is " << inputLength << " at start " << &bufferStart << std::endl; COLORREF pixel = […]

使用C ++支持时,Android Studio调试器不起作用

我无法调试我的Java类或Kotlin文件,所有断点都有“x”签名,但是它适用于cpp类文件 我在用着 Android Studio版本2.2.2 OS版本macOS siera 10.12 Gradle版本2.2.2 这是我的模块Build.gradle文件 apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' android { compileSdkVersion 25 buildToolsVersion "25.0.2" defaultConfig { applicationId "awesomethings.ge.takeapic" minSdkVersion 18 targetSdkVersion 25 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" externalNativeBuild { cmake { cppFlags "-std=c++11 -fexceptions" } } } buildTypes { release { minifyEnabled false proguardFiles […]

Kotlin中`external`关键词的用途是什么?

Kotlin中的external关键字的目的究竟是什么? 我想这是Java的native Java的JNI,但我似乎无法找到任何实际的参考或文件。