繁体   English   中英

无法开始工作.so android项目中的共享库

[英]Cannot get to work .so shared library in android project

android开发和java绝对是新手,所以问题可能微不足道,但我已经对尝试或阅读的内容或google感到困惑,因此请提供帮助。 试图创建一个应用程序,该应用程序应该对选定的图像集进行一些批处理。 找到了一个完全适合我需要的 ,将其连接起来并编写了一个简单的测试,该程序必须检查一切是否正常运行:

if (requestCode == SELECT_PICTURE && resultCode == RESULT_OK && null != data) {
        Uri selectedImageUri = data.getData();
        m_ImagePath = getRealPathFromUri(selectedImageUri);

        try {
            m_MagickImage = new MagickImage(new ImageInfo(m_ImagePath));
            m_EffectImage = m_MagickImage.rotateImage(90);
            m_Bitmap = MagickBitmap.ToReducedBitmap(m_EffectImage, 1000);
        } catch (MagickException e) {
            Log.d(LOGTAG, e.toString());
        }

        ImageView imageview = (ImageView) findViewById(R.id.imageView);
        imageview.setImageBitmap(m_Bitmap);
        //imageview.setImageURI(selectedImageUri);

        openFileButton.setVisibility(View.GONE);
    }

项目构建完全正常,没有警告,但是当我将其部署在真实硬件上并单击分配给书面测试的按钮时,在logcat中出现以下错误:

JNI DETECTED ERROR IN APPLICATION: GetStringUTFChars received NULL jstring
    in call to GetStringUTFChars
    from void magick.ImageInfo.setFileName(java.lang.String)
    "main" prio=5 tid=1 Runnable

还有200多个系统信息和警告字符串(不要认为它们很重要,但可以按需提供所需的一切)。

而且在那次奔跑之后,我收到了很多红色警告,例如

cannot resolve corresponding jni function Java_magick_ImageInfo_setFileName

在几乎所有与Android-Imagemagick相关的Java文件中。

按照我在线程中找到的说明,将库连接为.jar文件。 这是我的设置:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.0.0'
    compile 'com.android.support:design:25.0.0'
    testCompile 'junit:junit:4.12'
}

sourceSets {
        main {
            java.srcDirs = ['src/main/java']
        }
    }

在build.gradle中。

armeabi.jar,在项目根目录的'libs'目录中具有.so文件,在'src / main / java'中具有包装类的'fakeawt'和'magick'文件夹,以及

static {
        System.loadLibrary("imagemagick");
    }

在Main.java的开头。

任何想法可能出什么问题以及如何正确解决?

我建议您使用的Android Studio是否遵循项目结构:App |-> src |-> jnilibs在此处复制与https://github.com/paulasiimwe/Android-ImageMagick/tree/master/libs相同的所有文件夹并粘贴到jnilibs(libs)中,然后在应用程序build.gradle中添加跟随行

sourceSets.main {
jniLibs.srcDir 'src/main/libs' // use the jni .so compiled from the manual ndk-build command
jni.srcDirs = [] //disable automatic ndk-build call
}

同步gradle

不要在您的项目中复制jni文件,这是为了您在库中进行自定义更改。 从设置中设置NDK路径。

抱歉,该问题与ndk或共享库无关。 它只是不推荐使用的getRealPathFromUri()函数,与现代android 5+图像选择器一起使用时始终返回NULL值。

另外,由于某种原因,将NULL指针传递给JNI方法总是会导致段错误,因此必须事先验证这些值。

通过根据答案替换适当的函数并创建if-else语句来检查返回的真实文件路径是否为NULL来解决。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM