我正在尝试使用.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
答案 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);
}