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

时间:2016-11-15 12:53:19

标签: java android android-studio android-ndk android-gradle

对于android开发和java绝对新手这样的问题可能是微不足道的,但我已经混淆了尝试或阅读或谷歌下一步所以请帮忙。尝试创建应该对选定的图像集进行一些批处理的应用程序。找到一个完全符合我需求的library,连接它并写了一个简单的测试,必须检查一切是否正常工作:

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文件。

库已按照我在this主题中找到的说明连接为.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中的.so文件' libs'项目根目录中的目录,' fakeawt'和' magick'包含在' src / main / java'和

中的包装类的文件夹
static {
        System.loadLibrary("imagemagick");
    }

在Main.java的开头。

知道可能出现的问题以及如何正确解决问题?

2 个答案:

答案 0 :(得分:0)

我建议你使用Android工作室遵循项目结构: 应用 | - > SRC   | - > jnilibs     这里复制与https://github.com/paulasiimwe/Android-ImageMagick/tree/master/libs相同的所有文件夹并粘贴到jnilibs(libs)中 而不是在app build.gradle中添加跟随行

<pas-appointment>

同步gradle

不要复制项目中的jni文件,它适用于库中的自定义更改。 从设置中设置NDK路径。

答案 1 :(得分:0)

抱歉,该问题与ndk或共享库无关。它刚刚被弃用了getRealPathFromUri()函数,当与现代android 5+图像选择器一起使用时,它总是返回NULL值。

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

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