【发布时间】:2014-05-23 09:42:28
【问题描述】:
我正在尝试使用 .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);
}
我已将 .so 文件,即 libencprog.so 包含在我的 android 应用程序的 libs/armeabi-v7a 文件夹中。
加载.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);
我收到以下错误
异常 Ljava/lang/UnsatisfiedLinkError;初始化 Lcom/example/soencryptiondemo/EncryptionSoClass 时抛出;
如果我缺少任何步骤,请告诉我..
我已经在 eclipse 中添加了对 c/c++ 的原生支持,并且还包含了 android ndk
【问题讨论】:
标签: android c native-code