2011-03-10 4 views
3

Je crée une application Android Xoom qui affiche un pdf dans l'une des activités. J'ai téléchargé les fichiers sources de mupdf: mupdf.c, Android.mk, Application.mk, Core.mk et ThirdParty.mk.android JNI chargement mupdf (compiler avec NDK?)

Je suis également sur le site Web de mupdf.com et essayé de télécharger divers paquets pré-compilés à partir d'ici: http://ccxvii.net/mupdf/download/

Je viens passé à Android de l'iPhone et ont quelques choses à apprendre en ce qui concerne notamment le code C . J'ai mis les fichiers mk/c dans/jni/dans mon projet. J'ai également essayé de copier les fichiers précompilés que j'ai téléchargés depuis le site web ci-dessus dans/jni/dans mon projet.

J'ai une classe simple:

import android.graphics.*; 

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

Chaque fois que je crée une instance de cette classe les accidents d'applications et il est dit « ExceptionInInitializerError », ainsi que « Impossible de charger mupdf: findLibrary retourné null » dans le LogCat.

J'ai aussi téléchargé l'android NDK et essayé de compiler la source moi-même. J'ai une erreur mupdf.h manquante et une erreur fitz.h. Juste une liste complète d'erreurs et cela semble trop compliqué pour inclure une bibliothèque.

Je travaille sur un Mac dans Snow Leopard. Je pense que je suis sur la bonne voie pour compiler ceci en tant que binaire, mais c'est vraiment frustrant d'avoir passé tout ce temps à apprendre sur le NDK alors il ne compilera pas. Peut-être que j'ai besoin d'une source mise à jour.

Quelqu'un peut-il m'aider à me diriger dans la bonne direction?

+0

Je suis en train de lire les instructions de compilation pour android, il dit d'éditer local.properties, je ne vois pas un tel fichier dans cette source téléchargée de mupdf.com. – Paul

+0

Commençons par vos erreurs ndk-build. Pouvez-vous montrer ce qui se passe quand vous ndk-build? –

+0

Il s'agit d'une affaire plus importante que le simple "chargement d'une bibliothèque" car la bibliothèque doit être construite pour ARM et contre les bibliothèques Android. Essayer de charger la bibliothèque renverra null jusqu'à ce que vous obteniez la partie ndk de ce travail. –

Répondre

2

Vous devez configurer votre inclure des chemins correctement dans votre Android.mk

S'il vous plaît poster votre Android.mk pour plus d'aide, bien que dans l'intervalle, vous pouvez essayer d'emprunter à la NDK samples, qui sont inclus dans votre Dossier NDK. Essayez d'abord de les construire comme une vérification d'intégrité, puis regardez dans jni/Android.mk pour voir comment leurs makefiles sont configurés.

Le répertoire docs du NDK contient également une excellente documentation sur le fichier Android.mk. Honnêtement, il sera difficile d'utiliser le NDK à moins d'être expérimenté en C. Connaître les tenants et les aboutissants de make, gcc et ld est d'une importance primordiale.

Modifier - pour faciliter ce processus, je clonerais le dépôt git mupdf. Il y a en fait un Android project prêt à être construit.

Assurez-vous d'utiliser git pour effectuer le clonage, car vous souhaitez disposer de tous les fichiers nécessaires. Le readme a des instructions simples sur la construction. Il semble que cela fonctionne d'abord et que le peaufinage à partir de là pourrait être un chemin de développement plus fiable pour vous.

+0

local_path: = $ (appeler mon-dir) TOP_LOCAL_PATH: = $ (local_path) MUPDF_ROOT: = .. $ INCLUDE (TOP_LOCAL_PATH) /Core.mk comprennent $ (TOP_LOCAL_PATH) /ThirdParty.mk comprennent $ (CLEAR_VARS) LOCAL_C_INCLUDES: = \ \t $ (MUPDF_ROOT)/tirer \ \t $ (MUPDF_ROOT)/Fitz \ \t $ (MUPDF_ROOT)/MuPDF LOCAL_CFLAGS: = LOCAL_MODULE : = mupdf LOCAL_SRC_FILES: = Mupdf.c LOCAL_STATIC_LIBRARIES: = mupdfcore mupdfthirdparty LOCAL_LDLIBS: = -lm -llog -ljnigraphics comprennent $ (BUILD_SHARED_LIBRARY) – Paul

+0

J'ai obtenu assez loin. J'ai lu Thirdparty.mk et j'ai remarqué que les répertoires qu'ils spécifient n'incluent pas les numéros de version comme les dossiers que j'ai téléchargés. J'ai donc renommé le dossier et suis en mesure d'arriver au point où il est maintenant dit "Aucune règle pour faire la cible". J'essaye de comprendre ceci, la dernière ligne du Core.mk est $ (BUILD_STATIC_LIBRARY). Il doit y avoir un autre chemin d'un endroit qui doit être mis à jour pour le fichier make ou quelque chose. – Paul

+0

Dieu ... maintenant je reçois des choses comme "pdf_crypt.c: 364: référence non définie à' fz_sha256init '". Je viens d'éditer la source pour une redéfinition de type. Pourquoi est-ce distribué avec des bugs comme celui-ci? Ne feraient-ils pas une build de test? Ou seulement les développeurs "dignes" autorisés à utiliser ce code s'ils peuvent passer 3 heures à le déboguer. – Paul

0

J'ai été en mesure de construire une bibliothèque mupdf pour android. Je suis d'accord avec Paul, j'ai dû faire un peu de bricolage pour le faire fonctionner. Vous devriez être capable de corriger ces erreurs avec des changements mineurs. Ce sur quoi vous devez vous concentrer, c'est de vous assurer que les chemins vers tous ces différents dossiers source tiers sont présents et corrects.

Questions connexes