Ich versuche, Zugriff auf PDF-Dateien in meiner App mit https://github.com/barteksc/PdfiumAndroid und Hinzufügen einiger Funktionen wie Suchen und Hervorheben mit Java und C++. Das Problem ist, dass ich immer einen Absturz bekomme, ohne Ausnahmedetails. In Debuggen fand ich SIGABRT (Signal SIGABRT) SIG: 9 FehleradresseAndroid JNI Native Absturz während der Garbage Collection SIG 9 bei Verwendung von Pdfium Bibliothek
Meine native Funktion ist
#include <fpdftext.h>
JNIEXPORT jstring JNICALL Java_[my package]_PdfiumCore_nativeGetPageText(JNIEnv *env, jobject instance, jlong pagePtr) {
unsigned short* buffer;
FPDF_TEXTPAGE text_page = FPDFText_LoadPage((FPDF_PAGE) pagePtr);
int len = FPDFText_CountChars(text_page);
FPDFText_GetText(text_page,0,len,buffer);
jstring txt = env->NewString(buffer, len);
FPDFText_ClosePage(text_page);
return txt; }
Java-Funktion in PdfiumCore.java
public String getPageText(PdfDocument doc, int pageIndex)
{
String txt;
synchronized (lock) {
try {
txt = nativeGetPageText(openPage(doc,pageIndex));
return txt;
}catch (Exception e)
{
Log.e("Error ",e.getMessage());
return "";
}
}
}
public long openPage(PdfDocument doc, int pageIndex) {
long pagePtr;
synchronized (lock) {
pagePtr = nativeLoadPage(doc.mNativeDocPtr, pageIndex);
doc.mNativePagesPtr.put(pageIndex, pagePtr);
return pagePtr;
}
}
Funktionsaufruf
Log.e("Page 0",pdfiumCore.getPageText(pdfDocument,0));
Die Funktion ruft die Daten ab, sobald die App abstürzt. Ich schätze das Problem ist, wenn der Garbage Collector versucht, den Pufferzeiger zu löschen, der in der FPDFText_GetText Funktion verwendet wird. aber ich weiß nicht, wie ich es lösen soll.
irgendein Vorschlag bitte.