Android Studio jni开发之经典入门demo
2017-06-22 14:35
537 查看
此文记录一下Android Studio 进行jni开发的基础配置以及入门教程,每次都参考网上的,自己记录一下,以后就省事儿了。
File → Setting → 按截图找到如下路径 → 选择NDK → 确定下载
安装完成以后就可以开始coding了.
打开local.properties,添加:
最后打开app内build.gradle,在android/defaultConfig下面添加ndk配置
moduleName 表示编译出的so文件的名字
getJniString()方法即要与C层的交互的接口函数
打开终端,运行
运行成功之后打开app/build/intermediates/classes/debug/ 即可找到编译出的头文件”com_demo_testjni_JniDemo.h”,不难发现头文件名是有原报名+类名组成
找到刚才生成到头文件,复制到jni文件夹下(记得关闭刚才使用的终端,否则无法复制)
头文件有了,现在在jni目录下创建一个C++文件用于开发使用,命名与头文件相同
编写C++文件中定义函数的代码
至此就成功运行出jni的Hello World了
在jni目录下新建Application.mk文件
调用ndk-build开始编译so
运行成功之后即会看到main文件夹下多了libs和obj的文件夹,里面就是生成的各种CPU的so文件
一、环境配置
主要需要配置的就是NDK(Native Development Kit),可以一键下载:File → Setting → 按截图找到如下路径 → 选择NDK → 确定下载
安装完成以后就可以开始coding了.
二、新建一个项目新建一个项目testJni
1. 设置支持jni
打开gradle.properties,添加:android.useDeprecatedNdk=true
打开local.properties,添加:
ndk.dir=NDK的路径
最后打开app内build.gradle,在android/defaultConfig下面添加ndk配置
apply plugin: 'com.android.application' android { compileSdkVersion 25 buildToolsVersion "25.0.2" defaultConfig { applicationId "com.demo.testjni" minSdkVersion 22 targetSdkVersion 25 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" ndk { moduleName "JNIDemo" } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:25.3.1' compile 'com.android.support:design:25.3.1' testCompile 'junit:junit:4.12' }
moduleName 表示编译出的so文件的名字
2.新建java访问c层的接口类
创建一个Jni的工具类,并定义接口函数,函数关键字用nativepackage com.demo.testjni; /** * Created by ban fei peng on 2017/6/22 0022. */ public class JniDemo { static { System.loadLibrary("JNIDemo"); } public static native String getJniString(); }
getJniString()方法即要与C层的交互的接口函数
3.生成头文件
“make-project”编译完成打开终端,运行
cd app/build/intermediates/classes/debug/
javah -classpath . com.demo.testjni.JniDemo
运行成功之后打开app/build/intermediates/classes/debug/ 即可找到编译出的头文件”com_demo_testjni_JniDemo.h”,不难发现头文件名是有原报名+类名组成
4.创建jni开发的文件夹
点击app文件夹,New → Folder → JNI Folder, 选择在main文件夹下即可,生成成功后main目录下会出现一个jni的文件夹找到刚才生成到头文件,复制到jni文件夹下(记得关闭刚才使用的终端,否则无法复制)
头文件有了,现在在jni目录下创建一个C++文件用于开发使用,命名与头文件相同
编写C++文件中定义函数的代码
#include "com_demo_testjni_JniDemo.h" JNIEXPORT jstring JNICALL Java_com_demo_testjni_JniDemo_getJniString (JNIEnv *env, jclass obj) { // new 一个字符串,返回Hello World return env -> NewStringUTF("Hello World"); }
5. 运行Run
调用jni的接口函数public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.i("Jni", JniDemo.getJniString());
至此就成功运行出jni的Hello World了
三、生成so文件
前文介绍如何运行C++程序,但是实际开发中大多是封装编译出so文件后进行开发,就类似java里面的jar包
1.配置NDK环境变量
找到Android Studio安装的NDK包的文件目录(E:\soft\android-ndk-r10e),添加到系统的环境变量中2.新建mk文件
在jni目录下新建Android.mkLOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := JNIDemo LOCAL_SRC_FILES := com_demo_testjni_JniDemo.cpp include $(BUILD_SHARED_LIBRARY)
在jni目录下新建Application.mk文件
APP_ABI := armeabi armeabi-v7a APP_PLATFORM := android-8
3.编译生成so
打开终端cd到jni目录下调用ndk-build开始编译so
ndk-build
运行成功之后即会看到main文件夹下多了libs和obj的文件夹,里面就是生成的各种CPU的so文件
libs和obj里面都有so文件,两者的区别google给出的解释是: As part of the build process, the files in the libs folder have been stripped of symbols and debugging information. So you'll want to keep two copies of each of your .so files: One from the libs folder to install on the Android device, and one from the obj folder to install for GDB to get symbols from. 也就是说,libs目录下生成的库是剥离了符号表与调试信息的,而obj下的库是带有调试信息的。 至此jni的开发入门已完成
四、源码下载路径
点此下载五、jni常用类型和方法
jni也有自己特定的语法,完成入门教程的同学想进阶的话可以看下一篇博客。相关文章推荐
- Android Studio Jni开发详细入门,Aes加密demo
- Android Studio ndk-Jni开发详细入门,Aes加密demo
- Android Studio JNI开发入门教程
- Android Studio JNI开发入门教程
- Android Studio JNI开发入门教程
- 安卓实战开发之JNI入门及高效的配置(android studio一键生成.h,so及方法签名)
- Android Studio NDK-Jni开发小Demo
- Android Studio ndk-Jni开发详细入门,Aes加密demo
- Android Studio JNI开发入门教程
- JNI for Android, Android Studio NDK 入门 实例 demo
- Android Studio开发Jni教程-入门篇
- Android Studio JNI/NDK 编程 Windows 下环境搭建 demo 开发
- NDK &JNIAndroid Studio开发与调试DEMO(三)(生成 .so 文件)
- 一个 Demo 学会搭建 Android Studio JNI 开发环境
- Mac android studio JNI入门demo
- Android Studio NDK JNI开发入门记录
- Android Studio JNI/NDK 编程(二) Windows 下环境搭建 demo 开发
- Android 4编程入门经典—开发智能手机与平板电脑应用
- Android JNI开发入门
- Android4开发入门经典 之 第一部分:Android入门基础