我正在开发一个Android应用程序,我希望能够将我拍摄的相机图片转换成4组压缩效果。
我尝试使用this Android-ImageMagick library,但收到以下错误:
java.lang.UnsatisfiedLinkError - NDK
我提到this StackOverflow question要解决,但它没有用。
库的代码出错,Magick.java:43行是init()的调用;方法。
由于我们在Android Studio中使用Gradle,因此我强烈怀疑这是因为Gradle。图书馆作者“如何使用它”的解释是基于没有Gradle的项目。
如果我们将方法“init()”的名称更改为“test()”之类的另一个名称,则会在其他本机方法中发生错误。
我们的项目结构:
并将“ndk.dir”添加到local.properties中,尝试添加“sourceSets":
{
main {
jni.srcDirs=['jniLibs']
}
}
” at build.gradle.
/**
* The sole purchase of this class is to cause the native
* library to be loaded whenever a concrete class is used
* and provide utility methods.
*
* @author Eric Yeo
* @author Max Kollegov <virtual_max@geocities.com>
*/
public class Magick {
static {
/*String clprop = System.getProperty("jmagick.systemclassloader");
if (clprop == null || clprop.equalsIgnoreCase("yes")) {
try {
ClassLoader.getSystemClassLoader()
.loadClass("magick.MagickLoader").newInstance();
}
catch(ClassN`enter code here`otFoundException e) {
throw new RuntimeException("Can't load MagickLoader " +
"(class not found)");
}
catch(IllegalAccessException e) {
throw new RuntimeException("Access to SystemClassLoader "+
"denied (IllegalAccessException)");
}
catch(InstantiationException e) {
throw new RuntimeException("Can't instantiate MagicLoader " +
"(InstantiationException)");
}
}
else {
System.loadLibrary("JMagick");
}*/
System.loadLibrary("imagemagick");
init();
}
/**
* Initializes the ImageMagic system
*/
private static native void init();
/**
* Parses a geometry specification and returns the
* width, height, x, and y values in the rectangle.
* It also returns flags that indicates which of the
* four values (width, height, xoffset, yoffset) were
* located in the string, and whether the x and y values
* are negative. In addition, there are flags to report
* any meta characters (%, !, <, and >).
* @param geometry String containing the geometry specifications
* @param rect The rectangle of values x, y, width and height
* @return bitmask indicating the values in the geometry string
* @see magick.GeometryFlags
*/
public static native int parseImageGeometry(String geometry, Rectangle rect);
}
这是我得到的错误:
java.lang.UnsatisfiedLinkError: Native method not found: com.test.comp.magick.Magick.init:()V
at com.test.comp.magick.Magick.init(Native Method)
at com.test.comp.magick.Magick.<clinit>(Magick.java:43)
at com.test.comp.magick.util.MagickBitmap.fromBitmap(MagickBitmap.java:41)
at com.test.comp.activity.MainActivity.convertAndSendImage(MainActivity.java:60)
at com.test.comp.activity.MainActivity.onActivityResult(MainActivity.java:84)
at android.app.Activity.dispatchActivityResult(Activity.java:5423)
at android.app.ActivityThread.deliverResults(ActivityThread.java:3347)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:3394)
at android.app.ActivityThread.access$1300(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1244)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
答案 0 :(得分:0)
如果没有在apk中安装ImageMagick库并导致链接错误,则会引发UnsatisfiedLinkError:
您的图书馆必须位于目录/project/libs/armeabi/