2011-03-10 6 views
3

활동 중 하나에 pdf를 표시하는 Android Xoom 애플리케이션을 만들고 있습니다.android JNI loading mupdf (NDK로 컴파일)

mupdf 소스 파일 (mupdf.c, Android.mk, Application.mk, Core.mk 및 ThirdParty.mk)을 다운로드했습니다.

나는 또한 mupdf.com 웹 사이트에가 여기에서 다양한 미리 컴파일 된 패키지를 다운로드 시도

: 난 그냥 아이폰에서 안드로이드를 포함한 C 코드에 대해 배울 수있는 몇 가지를 가지고로 전환 http://ccxvii.net/mupdf/download/

. 내 프로젝트에서 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 오류가 누락되었습니다. 오류의 목록 전체가 라이브러리를 포함하는 데 지나치게 복잡해 보입니다.

저는 Snow Leopard에서 Mac을 사용하고 있습니다. 나는 이것을 바이너리로 컴파일 할 필요가있는 올바른 길에 있다고 생각하지만, 이번에 NDK에 대해 배우면서 컴파일하는 것은 정말 실망 스럽다. 아마 업데이트 된 소스가 필요합니다.

아무도 올바른 방향으로 나를 가리킬 수 있습니까?

+0

안드로이드에 대한 컴파일 지침을 읽고 있는데, local.properties를 편집하기 위해 mupdf.com에서 다운로드 한 소스에서 해당 파일을 볼 수 없습니다. – Paul

+0

ndk-build 오류로 시작하겠습니다. 당신이 ndk-build 할 때 일어날 일을 보여줄 수 있습니까? –

+0

이것은 라이브러리가 ARM 용과 Android 라이브러리 용으로 빌드되어야하기 때문에 "라이브러리를로드하는 것"보다 큰 의미가 있습니다. 라이브러리를로드하려고하면이 작업의 ndk 부분을 얻을 때까지 null이 반환됩니다. = $ (내-DIR 전화) TOP_LOCAL_PATH : –

답변

2

당신은 당신은 당신의 Android.mk에서 제대로 경로를 포함 설정할 필요가

그 동안 당신이에 포함 된 NDK samples에서 빌려 시도 할 수 있지만, 더 많은 도움을 Android.mk를 작성하세요 NDK 폴더.

처음에는 위생 확인으로 빌드 한 다음 jni/Android.mk에서 makefile의 설정 방법을 확인하십시오.

NDK의 docs 디렉토리에는 Android.mk 파일에 대한 훌륭한 설명서가 포함되어 있습니다.

솔직히, 당신이 C에 경험이 없으면 NDK를 사용하기가 어려울 것입니다. make, gcc, ld의 기능을 아는 것이 가장 중요합니다.

-이 과정을 더 쉽게하기 위해 mupdf git 저장소를 복제합니다 실제로는 Android project이 준비되어 있습니다.

필요한 파일을 모두 갖고 싶으므로 git을 사용하여 복제를 수행해야합니다. readme에는 건물에 대한 간단한 지침이 있습니다. 이 작업을 먼저 수행하고 거기에서 조정하면 더 안정적인 개발 경로가 될 수 있습니다.

+0

LOCAL_PATH 아래에 내 게시물을 체크 아웃 = $ (LOCAL_PATH) MUPDF_ROOT을 : = .. 포함 $이 (TOP_LOCAL_PATH) /Core.mk가 은 $을 포함 (TOP_LOCAL_PATH = \ \t $ (MUPDF_ROOT)/\ \t $ (MUPDF_ROOT)/피츠 \t $ (MUPDF_ROOT)/mupdf LOCAL_CFLAGS \ 그린다 = LOCAL_MODULE)를 은 $ (CLEAR_VARS) LOCAL_C_INCLUDES 포함 /ThirdParty.mk : = mupdf LOCAL_SRC_FILES : = mupdf.c LOCAL_STATIC_LIBRARIES = mupdfcore mupdfthirdparty LOCAL_LDLIBS = -lm -llog -ljnigraphics 는 $ (BUILD_SHARED_LIBRARY) – Paul

+0

그래서 나는 꽤 멀리 찍었을 포함한다. Thirdparty.mk를 통해 읽었을 때 지정한 디렉토리에 다운로드 한 폴더와 같은 버전 번호가 포함되어 있지 않은 것으로 나타났습니다. 그래서 나는 폴더의 이름을 바꾸었고 지금 "목표를 정하기위한 규칙 없음"이라고 말하는 지점에 도달 할 수 있습니다. 나는 이것을 알아 내려고 노력하고 있으며, Core.mk의 마지막 줄은 $ (BUILD_STATIC_LIBRARY)이다. 파일이나 파일을 만들기 위해 업데이트해야하는 다른 경로가 있어야합니다. – Paul

+0

하나님 ... 이제는 "pdf_crypt.c : 364 : fz_sha256init '에 대한 정의되지 않은 참조가 있습니다. 방금 형식 재정의 소스 편집을 마쳤습니다. 이런 버그가있는 이유는 무엇입니까? 그들은 테스트 빌드를 실행하지 않을까요? 또는 "가치있는"개발자 만이 코드를 디버깅하는 데 3 시간을 소비 할 수 있다면이 코드를 사용할 수 있습니다. – Paul

0

나는 안드로이드 용 mupdf 라이브러리를 빌드 할 수있었습니다. 나는 Paul과 동의한다. 나는 그것을 작동시키기 위해 약간의 조작을해야만했다. 사소한 변경으로 이러한 오류를 수정할 수 있어야합니다. 집중해야 할 것은 모든 제 3 자 소스 폴더에 대한 경로가 존재하고 올바른지 확인하는 것입니다.

관련 문제