2015-03-12 2 views
1

Я хочу открыть Tiff файлы, но встроенный просмотрщик изображений не может открыть файлы tiff. Поэтому я загрузил проект по следующему пути. TiffonAndroid
Android: java.lang.UnsatisfiedLinkError: не удалось найти «libtiff.so»

Я принял все СРК, рес файлы из этого проекта и добавил их к моему проекту. Во время работы я получаю эту ошибку

java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.tiffviewer-2/base.apk"], 
nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "libtiff.so". 

libtiff.so является C++ библиотека на основе проекта. Как решить вышеупомянутую проблему, можем ли мы добавить проекты на основе C++ в наш общий проект Android?

ответ

0

Это произошло, когда ваш APK не включил в него встроенную библиотеку. Да, вы можете добавить собственную поддержку для вашего текущего Android-проекта. Если вы используете Eclipse в качестве своей IDE, щелкните правой кнопкой мыши по вашему проекту, Android Tool ->Add Native Support.... Для получения дополнительной информации, взгляните на official document.

0

Если вы используете JNI и копируете файл .so, вы должны поместить класс, который содержит собственные методы в правильном пакете (определенный в .so), и использовать то же имя, которое определено в .so.

package site.zhuzijian.jnitest; 
public class NdkJniUtils { 
public static native String getLanguageString(String name); 

public static native String[] cryptRequest(String uuid, String time, String[] contents); 

static { 
    System.loadLibrary("jnitest"); 
}} 

и этот .h файл

#include <jni.h> 
#ifndef _Included_site_zhuzijian_jnitest_NdkJniUtils 
#define _Included_site_zhuzijian_jnitest_NdkJniUtils 
#ifdef __cplusplus 
extern "C" { 
#endif 
JNIEXPORT jstring JNICALL Java_site_zhuzijian_jnitest_NdkJniUtils_getLanguageString 
    (JNIEnv *, jclass, jstring); 
JNIEXPORT jobjectArray JNICALL Java_site_zhuzijian_jnitest_NdkJniUtils_cryptRequest 
    (JNIEnv *, jclass, jstring, jstring, jobjectArray); 

    #ifdef __cplusplus 
    } 
    #endif 
    #endif` 

Вы не можете увидеть этот .h файл, поскольку он составлен в .so файл. Как видите, метод в файле .h содержит имя пакета. Он должен соответствовать пакету NdkJniUtils

Смежные вопросы