Android Studio里的jni实现方法(一)
来源:互联网 发布:软件模型 编辑:程序博客网 时间:2024/06/06 22:22
在Android Studio里可以直接创建支持c++代码的工程, 在如下图中选上即可直接在工程里实现jni的编码操作:
创建支持c++代码的工程后,工程目录里会有cpp子目里,里面会有native-lib.cpp文件, 可以里面编写jni操作的C++代码.
如在jni里实现用c++代码调用Linux系统的文件读写操作. 窗口上实现点击一个按钮调用jni把内容写入文件里,点击别一按钮调用jni把文件内容读出.
/* MyActivity.java */package com.example.jk.testjni;import android.app.Activity;import android.os.Bundle;import android.support.annotation.Nullable;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.LinearLayout;public class MyActivity extends Activity { private LinearLayout vlayout; private Button btn_read, btn_write; private EditText editText; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); vlayout = new LinearLayout(this); btn_read = new Button(this); btn_write = new Button(this); editText = new EditText(this); btn_read.setText("read"); btn_write.setText("write"); vlayout.setOrientation(LinearLayout.VERTICAL); vlayout.addView(btn_read); vlayout.addView(btn_write); vlayout.addView(editText); setContentView(vlayout); btn_write.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { writeToFile(editText.getText().toString()); //调用jni里的写文件 } }); btn_read.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { editText.setText("read from file: "+readFromFile()); //调用jni里的读文件 } }); } static { System.loadLibrary("native-lib"); //此处的"native-lib"与文件名"native-lib.cpp"一致 } //声明jni里实现的函数 public native String readFromFile(); //从文件"/sdcard/my.txt"里读出内容 public native void writeToFile(String str); //把字符串内容写入到文件"/sdcard/my.txt"里}
/* native-lib.cpp */#include <jni.h>#include <string>#include <unistd.h>#include <fcntl.h>extern "C"JNIEXPORT jstring JNICALLJava_com_example_jk_testjni_MyActivity_readFromFile(JNIEnv *env, jobject obj) { char data[100]; int fd = open("/sdcard/my.txt", O_RDONLY); int ret ; if (fd > 0) { ret = read(fd, data, sizeof(data)); data[ret] = 0; close(fd); } return env->NewStringUTF(data);}extern "C"JNIEXPORT void JNICALLJava_com_example_jk_testjni_MyActivity_writeToFile(JNIEnv *env, jobject obj, jstring str) { const char *data = env->GetStringUTFChars(str, 0); int len = env->GetStringLength(str); int fd = open("/sdcard/my.txt", O_WRONLY|O_CREAT, 0777); write(fd, data, len); close(fd);}// 注意jni里的函数是按"Java_完整的包名_activity类名_函数名"来命名的// extern "C" 语句是用于兼容C动态库使用的, 不加会发生执行出错.
最后,需要在工程的AndroidManifest.xml里增加写sd的权限:
/* AndroidManifest.xml */<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.jk.testjni"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MyActivity" > <intent-filter> <action android:name="android.intent.action.MAIN"></action> <category android:name="android.intent.category.LAUNCHER"></category> </intent-filter> </activity> </application> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission></manifest>
程序执行画面:
阅读全文
0 0
- Android Studio里的jni实现方法(一)
- Android Studio里的jni实现方法(二)
- android studio jni使用的几种方法(一)
- Android Studio里使用JNI
- Android Studio实现JNI的开发(基础)
- Android studio简单的JNI实现
- Android Studio JNI的配置与实现
- android studio jni笔记一
- android studio中的JNI实现
- Android Studio下的JNI使用全解析(一)
- 一、android studio JNI 的简单编写使用。
- Android Studio 下配置JNI的使用 ---CMakeList【开篇一】
- Android Studio的配置ndk,jni的三种方法
- Android Studio生成Jni头文件的方法
- Android Studio 配置快捷方式生成JNI头文件的方法
- Android Studio生成Jni头文件的方法
- android JNI实现方法(一)——CDT
- 超级简单的Android Studio jni 实现(无需命令行)
- Atom不能下载插件
- 简单的LNMP架构的配置
- django 报错'NoneType' object has no attribute 'strftime'
- PS html CSS JS
- FragmentTransaction管理的Fragment生命周期状态
- Android Studio里的jni实现方法(一)
- 栈和队列自主学习作业
- NoSQL之Redis高级命令详解--持久化机制
- Linux安装CDH
- [算法基础]几个关于递归算法的练习题
- Codeforces 864C Round#436 C :果然还是模拟最难
- js实现2048小游戏
- find: ‘/run/user/1000/gvfs’: Permission denied
- Problem J. Worried School(日期模拟 STL)