Android Studio JNI 开发简单案例
2016-12-12 14:48
274 查看
转载:http://www.androidchina.net/5744.html
进程保活,热修复,硬件接入等等都需要底层的支持,而底层代码是 C 、C++ 写的,那么在 Android 中怎么调用底层的库呢?这里就需要了解 JNI 技术。
Android Studio 出来两年多了,网上针对 AS 开发 JNI 工程资源比较少,针对于此,我特意写下本篇博客,希望能对大家有所帮助。
项目关联NDK ,具体操作如图:
右键你的工程项目,选择 【Open Module Settings】
在 【Android NDK location】配置 NDK 的按着目录:
最后在 项目根目录 【gradle.properties】 下加上:
如图:
在
注意:
你会发现在你的
然后右键
然后拷贝
拷贝以下代码到
点击
编译成功后,打开
接着在
这样你就生成了一个属于自己的
进程保活,热修复,硬件接入等等都需要底层的支持,而底层代码是 C 、C++ 写的,那么在 Android 中怎么调用底层的库呢?这里就需要了解 JNI 技术。
Android Studio 出来两年多了,网上针对 AS 开发 JNI 工程资源比较少,针对于此,我特意写下本篇博客,希望能对大家有所帮助。
配置环境
下载NDK 请点击这里 ,并进行环境配置,如图:项目关联NDK ,具体操作如图:
右键你的工程项目,选择 【Open Module Settings】
在 【Android NDK location】配置 NDK 的按着目录:
最后在 项目根目录 【gradle.properties】 下加上:
android.useDeprecatedNdk=true
如图:
JNI实现
新建JNI_DEMO项目,完成以上的配置工作。我的项目路径为:
D:\Android_Study_Demos\JNI_DEMO
生成 .h 文件
新建TestJNI类
public class TestJNI { public native String HelloWord(String str); }
在
cmd命令下面,
cd到
java目录,输入
javah -jni com.github.jni_demo.TestJNI命令,生成
.h文件:
注意:
com.github.jni_demo.TestJNI不能 cd com , cd github……否则编译不成功。
你会发现在你的
java路劲下生成了
com_github_jni_demo_TestJNI.h文件:
/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class com_github_jni_demo_TestJNI */ #ifndef _Included_com_github_jni_demo_TestJNI #define _Included_com_github_jni_demo_TestJNI #ifdef __cplusplus extern "C" { #endif /* * Class: com_github_jni_demo_TestJNI * Method: HelloWord * Signature: (Ljava/lang/String;)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_github_jni_1demo_TestJNI_HelloWord (JNIEnv *, jobject, jstring); #ifdef __cplusplus } #endif #endif
然后右键
app>
New>
Folder>
JNI Folder生成jni目录如图:
然后拷贝
com_github_jni_demo_TestJNI.h到
jni目录下面:
生成 .C 文件
右键jni,生成
com_github_jni_demo_TestJNI.cpp文件:
拷贝以下代码到
.cpp文件中:
#include <stdio.h> #include <stdlib.h> #include "com_github_jni_demo_TestJNI.h" JNIEXPORT jstring JNICALL Java_com_github_jni_1demo_TestJNI_HelloWord (JNIEnv *env, jobject, jstring str) { return str; }
build.gradle 配置 ndk
在defaultConfig节点下加入如下代码:
ndk { moduleName "TestJNI" abiFilters "armeabi", "armeabi-v7a", "x86" }
点击
Build>
Make Project如图:
编译成功后,打开
build>
intermediates>
ndk>
debug>
lib下查看生成的
.so文件:
Java中调用JNI
记得把生成的.so文件拷贝到项目的
libs目录下:
接着在
Java中调用
JNI:
package com.github.jni_demo; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; public class MainActivity extends AppCompatActivity { static { // 加载动态库 System.loadLibrary("TestJNI"); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TestJNI testJNI=new TestJNI(); Log.e("---------------","************"+testJNI.HelloWord("恭喜你,调用成功!")); } }
这样你就生成了一个属于自己的
.so文件。
相关文章推荐
- Android Studio JNI 开发简单案例
- Android Studio JNI 开发简单案例,捡代码论坛整理。
- Android之搭建JNI开发环境及简单案例1
- "Android Studio"下最简单详细的"JNI"开发
- Android Studio jni开发 串口通信
- 深入浅出 - Android系统移植与平台开发(十) - led HAL简单设计案例分析
- Android Studio JNI开发
- android Jni NDK开发环境搭建及其简单实例的编写
- Android Stuido Ndk-Jni 开发(一):创建简单的JniDemo
- Mac环境下Android Studio jni开发调用 javah编译不了头文件问题
- Android&nbsp;Studio&nbsp;中JNI开发流程小结
- 深入浅出 - Android系统移植与平台开发(十) - led HAL简单设计案例分析
- android Jni NDK开发环境搭建及其简单实例的编写
- AndroidStudio NDK-JNI简单实例
- 超级简单的Android Studio jni 实现(无需命令行)
- AndroidStudio jni 开发
- 深入浅出 - Android系统移植与平台开发(十) - led HAL简单设计案例分析
- 最简单的Android JNI开发入门,JNI环境配置
- 实现Android Studio JNI开发C/C++使用__android_log_print输出Log
- 深入浅出 - Android系统移植与平台开发(十) - led HAL简单设计案例分析