Android项目中创建文件夹 无返回值
public static native void setFile(String str); //声明本地库
static{
System.loadLibrary("test_jni"); //导入本地库
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setFile("/mnt/sdcard/gril.text"); //调用本地库
}
首先声明本地库,然后通过javah命令生成响应的 .h文件
javah -classpath bin\clesses;android.jar -d jni 项目包名+当前类名
Android.jar是AndroidSDK的jar包,任意版本的都行 如果没有加 会出现
错误: 无法访问android.app.Activity
找不到android.app.Activity的类文件
的错误
创建我们的test_jni.c文件
函数的命名为使用javah生成的函数名
#include <string.h>
#include <jni.h>
#include<stdio.h>
#include<stdlib.h>
<span style="font-family: Arial, Helvetica, sans-serif;">/**</span>
<span style="font-family: Arial, Helvetica, sans-serif;">* 创建文件</span>
* env 指针 jclass 类对象,jstring String类型的参数
*/
JNIEXPORT void JNICALL Java_com_example_jni_1file_MainActivity_setFile
(JNIEnv *env, jclass jclass, jstring str){
const char*mystr=(*env)->GetStringUTFChars(env,str,NULL); //将jni类型的str转化为C语言可识别的字符
FILE*file=fopen(mystr,"a+"); //创建文件
if(file!=NULL){
// LOGV("file is succes");
}
char data[]="I an a boy";
int count=fwrite(data,strlen(data),1,file); //写入数据
if(count>0){
// LOGV("succes");
}
if(file!=NULL){
fclose(file); //关闭流
}
}
Android项目中调用C函数 返回String
JNIEXPORT jstring JNICALL Java_com_example_jni_1file_MainActivity_getMyString
(JNIEnv *env, jclass jclass){
return (*env)->NewStringUTF(env, "hello jni!"); //创建字符串
}
<span style="font-size:24px;">Activity中</span>
<span style="font-size:24px;">直接getMyString()即可取得返回值</span>
<span style="font-size:24px;">
</span>
<span style="font-size:24px;">
</span>