我正在使用(APV pdf查看器),如此链接所示 link1& link2
无论如何它运作正常。但是,当我通过项目更改了包的名称时,它给出了以下异常:
09-10 22:02:35.936: E/AndroidRuntime(556): FATAL EXCEPTION: main
09-10 22:02:35.936: E/AndroidRuntime(556): java.lang.UnsatisfiedLinkError: parseFile
09-10 22:02:35.936: E/AndroidRuntime(556): at cx.hell.android.pdfviewIktab.PDF.parseFile(Native Method)
09-10 22:02:35.936: E/AndroidRuntime(556): at cx.hell.android.pdfviewIktab.PDF.<init>(PDF.java:87)
09-10 22:02:35.936: E/AndroidRuntime(556): at cx.hell.android.pdfviewIktab.OpenFileActivity.getPDF(OpenFileActivity.java:569)
09-10 22:02:35.936: E/AndroidRuntime(556): at cx.hell.android.pdfviewIktab.OpenFileActivity.startPDF(OpenFileActivity.java:530)
09-10 22:02:35.936: E/AndroidRuntime(556): at cx.hell.android.pdfviewIktab.OpenFileActivity.onCreate(OpenFileActivity.java:282)
09-10 22:02:35.936: E/AndroidRuntime(556): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
09-10 22:02:35.936: E/AndroidRuntime(556): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
09-10 22:02:35.936: E/AndroidRuntime(556): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
09-10 22:02:35.936: E/AndroidRuntime(556): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
09-10 22:02:35.936: E/AndroidRuntime(556): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
09-10 22:02:35.936: E/AndroidRuntime(556): at android.os.Handler.dispatchMessage(Handler.java:99)
09-10 22:02:35.936: E/AndroidRuntime(556): at android.os.Looper.loop(Looper.java:123)
09-10 22:02:35.936: E/AndroidRuntime(556): at android.app.ActivityThread.main(ActivityThread.java:4627)
09-10 22:02:35.936: E/AndroidRuntime(556): at java.lang.reflect.Method.invokeNative(Native Method)
09-10 22:02:35.936: E/AndroidRuntime(556): at java.lang.reflect.Method.invoke(Method.java:521)
09-10 22:02:35.936: E/AndroidRuntime(556): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
09-10 22:02:35.936: E/AndroidRuntime(556): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
09-10 22:02:35.936: E/AndroidRuntime(556): at dalvik.system.NativeStart.main(Native Method)
这是类(PDF.java):
package cx.hell.android.pdfviewIktab;
import java.io.File;
import java.io.FileDescriptor;
import java.util.List;
import cx.hell.android.lib.pagesview.FindResult;
public class PDF {
static {
System.loadLibrary("pdfview2");
}
public static class Size implements Cloneable {
public int width;
public int height;
public Size() {
this.width = 0;
this.height = 0;
}
public Size(int width, int height) {
this.width = width;
this.height = height;
}
public Size clone() {
return new Size(this.width, this.height);
}
}
private int pdf_ptr = -1;
private int invalid_password = 0;
public boolean isValid() {
return pdf_ptr != 0;
}
public boolean isInvalidPassword() {
return invalid_password != 0;
}
synchronized private native int parseFile(String fileName, int box, String password);
synchronized private native int parseFileDescriptor(FileDescriptor fd, int box, String password);
public PDF(File file, int box) {
// this is the line of (cx.hell.android.pdfviewIktab.OpenFileActivity.getPDF(OpenFileActivity.java:569))
this.parseFile(file.getAbsolutePath(), box, "");
}
public PDF(FileDescriptor file, int box) {
this.parseFileDescriptor(file, box, "");
}
synchronized public native int getPageCount();
synchronized public native int[] renderPage(int n, int zoom, int left, int top,
int rotation, boolean gray, boolean skipImages, PDF.Size rect);
synchronized public native int getPageSize(int n, PDF.Size size);
synchronized public native List<FindResult> find(String text, int page);
synchronized public native void clearFindResult();
synchronized public native List<FindResult> findOnPage(int page, String text);
synchronized private native void freeMemory();
public void finalize() {
try {
super.finalize();
} catch (Throwable e) {
}
this.freeMemory();
}
}
任何帮助,请?在此先感谢。
答案 0 :(得分:0)
此错误表示Android Dalvik虚拟机无法找到给定Java类/方法所需的本机库。请正确构建本机库。如果已经正确创建了本机库并且您确定它应该没有问题加载,那么它是Android / Dalvik bug或NDK bug ...但是这是极不可能的。 APV的用户群已多次询问此问题,通常是因为提出这个问题的人不了解JNI的基础知识。
如果您还不知道如何解决这个问题,我建议您创建基本的JNI&#34; hello,world&#34;应用程序用于Java,然后用于Android(使用android-ndk)并稍微使用它。这应该为你解决问题。
很抱歉,但这个错误与APV本身无关,APV在这里没有任何特殊的神秘魔法,它只是使用许多其他应用程序使用的标准验证技术(JNI)。
Java如何查找和调用本机方法的说明:http://docs.oracle.com/javase/6/docs/technotes/guides/jni/spec/design.html#wp679。
您已粘贴的代码已将pdfview程序包名称更改为pdfviewIktab。确保您已相应更改了JNI(C)函数名称。