Android(安卓)Studio 编写jni 实例
16lz
2021-01-25
1.保证AS中安装了ndk cmake 等插件 如没有可以通过AS中的Android SDK -> SDK Tools 勾选 在线下载安装
2.创建一个Android 项目Demo项目即可
3.添加Java2CJNI.java 注意此文件的包名类名
} 先注释掉 后面在编译生成.so库时再添加
4.生成.h文件
先将Java2CJNI.java 运用javac生成.class 文件再通过javah 命令生成.h
javac F:\AndroidStudio\MyJDK2\app\src\main\java\com\example\revo\myjdk\Java2CJNI.java
javah -classpath D:\androidstudy\app\build\intermediates\classes\debug -jni com.example.revo.myjdk.Java2CJNI
最后在代码目录如果看到com_example_revo_myjdk_Java2CJNI.h文件说明已成功
5.创建jni目录 拷贝com_example_revo_myjdk_Java2CJNI.h 同时创建.c文件
注意build.gradle 文件为app目录下的
defaultConfig {
applicationId "com.example.revo.myjdk"
minSdkVersion 27
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
ndk {
moduleName "Java2C" //生成的库名
abiFilters "armeabi-v7a", "x86" //指定的平台类型,如果不写,则默认会生成全平台的
}
}
gradle.properties文件中增加如下一行android.useDeprecatedNdk=true
点击Rebuild project 如果出现类似android.deprecatedNdkCompileLease=1527128725578等错误请在gradle.properties文件中增加如下一行
添加 android.deprecatedNdkCompileLease=1527128725578 注释掉android.useDeprecatedNdk=true
7.再次Rebuild project 如果成功 在MyJDK2\app\build\intermediates\ndk\debug\lib\armeabi-v7a
和MyJDK2\app\build\intermediates\ndk\debug\lib\x86目录均会出现libJava2C.so文件
为了使用.so库中的函数记得将
public class Java2CJNI {
static {
System.loadLibrary("Java2C");
}
public native String java2C();
}
static {
System.loadLibrary("Java2C");
}注释部分去掉
2.创建一个Android 项目Demo项目即可
3.添加Java2CJNI.java 注意此文件的包名类名
public class Java2CJNI { //static { // System.loadLibrary("Java2C"); //} public native String java2C();}
// System.loadLibrary("Java2C");//}public native String java2C();}注意此文件中的 static {
System.loadLibrary("Java2C");} 先注释掉 后面在编译生成.so库时再添加
4.生成.h文件
先将Java2CJNI.java 运用javac生成.class 文件再通过javah 命令生成.h
javac F:\AndroidStudio\MyJDK2\app\src\main\java\com\example\revo\myjdk\Java2CJNI.java
javah -classpath D:\androidstudy\app\build\intermediates\classes\debug -jni com.example.revo.myjdk.Java2CJNI
最后在代码目录如果看到com_example_revo_myjdk_Java2CJNI.h文件说明已成功
5.创建jni目录 拷贝com_example_revo_myjdk_Java2CJNI.h 同时创建.c文件
//// Created by Administrator on 2018/5/24.//#include "com_example_revo_myjdk_Java2CJNI.h"JNIEXPORT jstring JNICALL Java_com_example_revo_myjdk_Java2CJNI_java2C (JNIEnv *env, jobject instance){ return (*env)->NewStringUTF(env, "I am From Native C");}
6.build.gradle文件和gradle.properties 的修改 注意build.gradle 文件为app目录下的
defaultConfig {
applicationId "com.example.revo.myjdk"
minSdkVersion 27
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
ndk {
moduleName "Java2C" //生成的库名
abiFilters "armeabi-v7a", "x86" //指定的平台类型,如果不写,则默认会生成全平台的
}
}
gradle.properties文件中增加如下一行android.useDeprecatedNdk=true
点击Rebuild project 如果出现类似android.deprecatedNdkCompileLease=1527128725578等错误请在gradle.properties文件中增加如下一行
添加 android.deprecatedNdkCompileLease=1527128725578 注释掉android.useDeprecatedNdk=true
7.再次Rebuild project 如果成功 在MyJDK2\app\build\intermediates\ndk\debug\lib\armeabi-v7a
和MyJDK2\app\build\intermediates\ndk\debug\lib\x86目录均会出现libJava2C.so文件
为了使用.so库中的函数记得将
public class Java2CJNI {
static {
System.loadLibrary("Java2C");
}
public native String java2C();
}
static {
System.loadLibrary("Java2C");
}注释部分去掉
8.总结如果熟练或者说提高效率 4 5 步骤可以省略不用他们生成.h 直接新建jni文件 添加.c文件
可通过下面链接直接下载源码:
下载源码
更多相关文章
- 一款常用的 Squid 日志分析工具
- GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
- RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
- Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
- android 命令行 sqlite3 not found 解决方案
- 安卓项目构建与编译
- android相关插件下载以及安装
- Android(安卓)Audio 创建AudioTrack对象
- Android(安卓)SDK安装是连接不上问题