Android上,使用JNI调用C的函数,hellojni
2016-09-28 10:59
405 查看
参考:http://jingyan.baidu.com/album/495ba841e1d83b38b30ede2b.html?picindex=1
1. 首先,在Android studio中,创建工程。
2. 创建一个接口类JniTest
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/04/8c2558699b7453c250c33f73c6db4888)
JniTest.java 的内容是
3. Build->Make Project(ctrl+f9) 注意:生成class文件
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/04/7fdd7865081be720315c069002b0b2fc)
4. 在AS的Terminal窗口中,切换到工程目录下debug目录 ,生成该类的.h文件,在控制台执行如下命令:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/04/d004bcf5cc975603801620408447904d)
5. 执行完后该debug目录下多了.h文件,将其复制粘贴到android studio的jni目录下
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/04/e86c7c075e40c10e639bd5728e5994cb)
6. 在jni目录下添加功能c代码,jni->new->c/c++
source file 注意勾选生成.h文件
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/04/b59ff967d4d708e4b63edf1595f8ba1d)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/04/a26d85159c7da8a1ffe8613f4d7fd2c1)
7. C文件内容如下(函数可从com_example_yjx_testjpeg_JniTest.h文件copy改写),注意添加该头文件
8. 在mainactivity.java添加调用方法
9. 编辑该项目的build.gradle,在defaultConfig{}内添加如下代码:(添加ndk{},那部分)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/04/ebcc904c85288fb9bc328aded8bb58a4)
10. 编辑整个工作区间的gradle.properties使能ndk
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/04/03acf7bda22dd4b06c2bf7cfc9684880)
11. 配置ndk路径Open Module Settings(F4):Ndk目录\android-ndk-r11c
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/04/b5acd654e5f65393cbd05d2bdc303a3d)
12. 运行。
1. 首先,在Android studio中,创建工程。
2. 创建一个接口类JniTest
JniTest.java 的内容是
package com.example.yjx.testjpeg; /** * Created by yjx on 2016-9-26. */ public class JniTest { //本地方法获得字符串,本地方法有c/c++实现 public static native String helloPromC(); static { //指定库名,加载动态库需要,需要和build.gradle中指定的库名相一致 System.loadLibrary("hello-jni"); } }
3. Build->Make Project(ctrl+f9) 注意:生成class文件
4. 在AS的Terminal窗口中,切换到工程目录下debug目录 ,生成该类的.h文件,在控制台执行如下命令:
5. 执行完后该debug目录下多了.h文件,将其复制粘贴到android studio的jni目录下
6. 在jni目录下添加功能c代码,jni->new->c/c++
source file 注意勾选生成.h文件
7. C文件内容如下(函数可从com_example_yjx_testjpeg_JniTest.h文件copy改写),注意添加该头文件
#include "hello.h" #include "com_example_yjx_testjpeg_JniTest.h" /** * Class: com.example.yjx.testjpeg.JniTest * Method: helloPromC() **/ JNIEXPORT jstring JNICALL Java_com_example_yjx_testjpeg_JniTest_helloPromC(JNIEnv *env, jclass obj){ //char buf[]="Hello jni yin"; // return (*env)->NewStringUTP(env,buf); return (*env)->NewStringUTF(env,"Hello from JNI!"); };
8. 在mainactivity.java添加调用方法
package com.example.yjx.testjpeg; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView tv=(TextView) findViewById(R.id.aaa); JniTest jnitest=new JniTest(); String getC=jnitest.helloPromC(); tv.setText(getC); Toast.makeText(this,"从C读取字符串:"+ getC,Toast.LENGTH_LONG).show(); } }
9. 编辑该项目的build.gradle,在defaultConfig{}内添加如下代码:(添加ndk{},那部分)
10. 编辑整个工作区间的gradle.properties使能ndk
11. 配置ndk路径Open Module Settings(F4):Ndk目录\android-ndk-r11c
12. 运行。
相关文章推荐
- cocos2dx 与android函数的互相调用及使用jni
- Android使用JNI(从java调用本地函数)
- cocos2dx 与android函数的相互调用及使用jni
- Android之使用JNI调用NDK
- 简单JNI的使用--在Java中调用C库函数
- 利用JNI技术在Android中调用C++形式的OpenGL ES 2.0函数
- Android下使用dlopen函数动态调用.…
- Android使用ksoap2调用C#中的webservice函数方法
- Android JNI 使用的数据结构JNINativeMethod详解 ||建立Android SDK下的JNI、JAVA应用完整步骤---Android JAVA调用C++代码
- 【iOS-cocos2d-X 游戏开发之十三】详细讲解在Xcode中利用预编译并通过Jni调用Android的Java层代码(cocos2dx里访问调用Android函数)!
- 利用JNI技术在Android中调用C++形式的OpenGL ES 2.0函数
- 使用jni调用ffmpeg.so中的H264解码函数播放文件
- Android使用JNI调用C/C++生成的.so库的流程(功能:apk卸载时调用web页面)
- Android使用百度地图SDK调用百度地图时,发生错误 com.baidu.platform.comjni.map.basemap.JNIBaseMap.Create
- 利用JNI技术在Android中调用C++形式的OpenGL ES 2.0函数
- Android使用ksoap2调用C#中的webservice函数方法
- Android使用ksoap2调用C#中的webservice函数方法
- java中如何使用JNI调用C++写的函数
- 编译代码在Android中使用JNI调用Opencv本地代码 配置方式 边缘检测 范例代码
- android中打印函数调用栈、内存使用、屏幕分辨率