初始化类时抛出UnsatisfiedLinkError

时间:2014-05-23 09:42:28

标签: android c native-code

我正在尝试使用.so库加密来自android应用程序的文本文件。 我为它创建了一个c程序(encprog.c)并使用gcc命令将其转换为(.so)文件,即库。

加密文本文件的C程序如下:

encprog.c

        #include<stdio.h>
        #include<jni.h>

        void encrypt(char *name)
        {
        FILE *fp,*fp1;
        int choi;
        char temp[20]={"Temp.txt"},c;

        fp=fopen(name,"r+");
        if(fp==NULL)
          {
             printf("The file %s can't be open",name);
          }
        fp1=fopen(temp,"w+");
        if(fp1==NULL)
         {
           printf("The file Temp can't be open");
         }
         c=fgetc(fp);
        while(c!=EOF)
         {
         fputc((c+name[0]),fp1);
         c=fgetc(fp);
         }
         fclose(fp);
         fclose(fp1);
        remove(name);
        rename(temp,name);

        }

        void main()
        {
        char name[20]={"hello.txt"};

        JNIEXPORT jint JNICALL Java_com_example_soencryptiondemo_EncryptionSoClass_encrypt(JNIEnv * env, jobject obj, jint a, jint b)
        {
           return 1;
        }

        encrypt(name);

        }

我在libs / armeabi-v7a文件夹中的android应用程序中包含了.so文件,即libencprog.so。

加载.so文件的类如下

EncryptionSoClass.java

    package com.example.soencryptiondemo;

    public class EncryptionSoClass {
        /* load our native library */
        static {
            System.loadLibrary("libencprog");
        }

        public static native String encrypt(String filename);
    }

在我的Android.mk文件中,我编写了代码

    LOCAL_PATH := $(call my-dir)

    include $(CLEAR_VARS)

    LOCAL_MODULE    := encprog
    LOCAL_SRC_FILES := encprog.c

    include $(BUILD_SHARED_LIBRARY)

我通过编写

来调用.so库的加密函数
         EncryptionSoClass.encrypt(Global.file_path + filename);

我收到以下错误

Exception Ljava / lang / UnsatisfiedLinkError;在初始化Lcom / example / soencryptiondemo / EncryptionSoClass;

时抛出

告诉我,如果我错过任何一步......

我已经在eclipse中添加了对c / c ++的原生支持,并且还包含了android ndk

1 个答案:

答案 0 :(得分:0)

你的local_module是&#34; LOCAL_MODULE:= encprog&#34; ,请参见下文,

 public class EncryptionSoClass {
    /* load our native library */
    static {
        System.loadLibrary("encprog");
    }

    public static native String encrypt(String filename);
}