对于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的开头。
知道可能出现的问题以及如何正确解决问题?
答案 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来解决。