2011-03-10 101 views
3

我正在創建一個Android Xoom應用程序,它在其中一個活動中顯示PDF。android JNI加載mupdf(用NDK編譯?)

我已經下載了mupdf源文件:mupdf.c,Android.mk,Application.mk,Core.mk和ThirdParty.mk。

我也一直在mupdf.com網站,並試圖從這裏下載各種預編譯的軟件包:http://ccxvii.net/mupdf/download/

我剛換從iPhone到Android和有一些東西需要學習有關,包括C代碼。我把mk/c文件放到我的項目中的/ jni /中。我也嘗試複製我從我的項目中的/ jni /上面的網站下載的預編譯文件。

我有一個簡單的類:

import android.graphics.*; 

    public class PDFView { 
     static { 
      System.loadLibrary("mupdf"); 
     } 
    } 

每次我創建這個類應用程序崩潰和它說「的ExceptionInInitializerError」以及實例「無法加載mupdf:findLibrary返回null」在LogCat。

我也下載了android NDK,並試圖自己編譯源代碼。我得到一個缺少mupdf.h錯誤和fitz.h錯誤。只是一個錯誤列表,這似乎過於複雜,包括一個圖書館。

我正在雪豹的Mac上工作。我認爲我需要將它作爲一個二進制文件編譯的正確道路,但是花了這麼多時間瞭解NDK然後它不會編譯,真是令人沮喪。也許我需要一個更新的來源。

任何人都可以幫助指向正確的方向嗎?

+0

我正在閱讀android的編譯指令,它說編輯local.properties,我看不到這個從mupdf.com下載的源文件。 – Paul 2011-03-10 01:18:09

+0

讓我們從你的ndk-build錯誤開始。你可以展示當你ndk-build時會發生什麼? – 2011-03-10 01:25:17

+0

這是一個比「加載庫」更大的交易,因爲庫必須針對ARM和Android庫進行構建。嘗試加載庫將返回null,直到獲得此工作的ndk部分。 – 2011-03-10 01:26:47

回答

2

你需要設置你的正確包括你的Android.mk路徑

請發表您的Android.mk更多的幫助,但在此期間,您可以嘗試從NDK samples,其中包括在借用你NDK文件夾。

先嚐試構建它們作爲完整性檢查,然後查看jni/Android.mk以查看它們的makefile文件是如何設置的。

NDK中的docs目錄還包含有關Android.mk文件的很好的文檔。

說實話,除非你有C的經驗,否則很難使用NDK。瞭解make,gcc和ld的內容是非常重要的。

編輯 - 爲了使這個過程更容易,我將克隆mupdf git存儲庫。實際上有一個Android project準備建立。

請確保您使用git來做克隆,因爲您想擁有所有必需的文件。自述文件有關於構建的簡單說明。這似乎是首先將這項工作做好,並從中調整出來,可能會爲您提供更可靠的發展途徑。

+0

LOCAL_PATH:= $(叫我-DIR) TOP_LOCAL_PATH:= $(LOCAL_PATH) MUPDF_ROOT:= .. 包括$(TOP_LOCAL_PATH)/Core.mk 包括$(TOP_LOCAL_PATH )/ThirdParty.mk 包括$(CLEAR_VARS) LOCAL_C_INCLUDES:= \ \t $(MUPDF_ROOT)/繪製\ \t $(MUPDF_ROOT)/菲茨\ \t $(MUPDF_ROOT)/ mupdf LOCAL_CFLAGS:= LOCAL_MODULE := mupdf LOCAL_SRC_FILES: = mupdf.c LOCAL_STATIC_LIBRARIES:= mupdfcore mupdfthirdparty LOCAL_LDLIBS:= -lm -llog -ljnigraphics 包括$(BUILD_SHARED_LIBRARY) – Paul 2011-03-10 16:57:19

+0

所以我很遠得到。我通過Thirdparty.mk閱讀並注意到他們指定的目錄不包括像我下載的文件夾那樣的版本號。所以我重命名了這個文件夾,並且能夠達到現在所說的「沒有制定目標的規則」的地步。我試圖弄清楚,Core.mk的最後一行是$(BUILD_STATIC_LIBRARY)。必須有另一個路徑需要更新make文件或某些地方。 – Paul 2011-03-10 17:47:09

+0

上帝......現在我得到像「pdf_crypt.c:364:未定義的引用到'fz_sha256init'」的東西。我剛完成編輯源重定義類型。爲什麼這樣發佈這樣的錯誤?他們不會運行測試版本嗎?或者只有「有價值的」開發者允許使用這些代碼,如果他們可以花3個小時來調試它的話。 – Paul 2011-03-10 18:23:58

0

我已經能夠爲android構建mupdf庫。 我同意保羅的觀點,我不得不做一些修補工作來讓它工作。您應該能夠通過較小的更改來修復這些錯誤。你應該關注的是確保所有這些不同的第三方源文件夾的路徑是正確的。