Android studio NDK-JNI HelloJNI
2016-08-24 00:00
363 查看
摘要: 进入NDK的世界
上一篇文章教了一些大家配置生成so .h 等方法。这边就来讲下如何写一个HelloJNI的项目工程,
开始了。
在AS中新建一个Project,然后再新建一个class文件HelloJNI,在内部声明native方法(jni使用的定义)。
在工程的文件入口Activity写下如下代码
这里需要一个比较重要的步骤(这里需要先将project build一下)
接下来使用我们上篇的教程选中工程里面HelloJNI文件右键,
找到如下菜单,选择NDK-->javah方法。
然后我们就会看先在main目录下面生了一个新的目录。--> jni <--对这个就我们需要的目录里面自然也生成了响应的.h文件,掌声在哪里。
打开文件.h 查看内容如下
.h文件生成完毕之后,我们需要写对应的c或者cpp文件,也就是是C/C++文件,在jni目录下面我们在创建一个文件helloJni.c的文件 内容如下
文件写好之后 需要在工程的找到local.properties文件中添加NDK路径(之前下载好的)
添加在sdk后面就好
在找到gradle.properties文件添加
接下来在app module目录下的build.gradle中设置库文件名(生成的so文件名)。找到gradle文件的defaultConfig这项,在里面添加如下内容:
接下来就是编译工程运行就可以了。
上一篇文章教了一些大家配置生成so .h 等方法。这边就来讲下如何写一个HelloJNI的项目工程,
开始了。
在AS中新建一个Project,然后再新建一个class文件HelloJNI,在内部声明native方法(jni使用的定义)。
public class HelloJNI { public native String getClanguageString(); static { System.loadLibrary("hellojni"); } }
在工程的文件入口Activity写下如下代码
public class MainActivity extends AppCompatActivity { private TextView mTextview; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTextview = (TextView)findViewById(R.id.textView); HelloJNI helloJni = new HelloJNI(); //创建helloJni对象 mTextview.setText(helloJni.getClanguageString());//调用getClanguageString()方法 } }
这里需要一个比较重要的步骤(这里需要先将project build一下)
接下来使用我们上篇的教程选中工程里面HelloJNI文件右键,
找到如下菜单,选择NDK-->javah方法。
然后我们就会看先在main目录下面生了一个新的目录。--> jni <--对这个就我们需要的目录里面自然也生成了响应的.h文件,掌声在哪里。
打开文件.h 查看内容如下
/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class com_org_text_HelloJNI */ #ifndef _Included_com_org_text_HelloJNI #define _Included_com_org_text_HelloJNI #ifdef __cplusplus extern "C" { #endif /* * Class: com_org_text_HelloJNI * Method: getClanguageString * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_org_text_HelloJNI_getClanguageString (JNIEnv *, jobject); #ifdef __cplusplus } #endif #endif
.h文件生成完毕之后,我们需要写对应的c或者cpp文件,也就是是C/C++文件,在jni目录下面我们在创建一个文件helloJni.c的文件 内容如下
// // Created by 许健 on 16/8/24. // #include "com_org_text_HelloJNI.h" JNIEXPORT jstring JNICALL Java_com_org_text_HelloJNI_getClanguageString (JNIEnv *env, jobject obj){ return (*env)->NewStringUTF(env,"HelloWorld!"); }
文件写好之后 需要在工程的找到local.properties文件中添加NDK路径(之前下载好的)
添加在sdk后面就好
sdk.dir=/Users/xujian/Documents/Android_eclipse/android_DEV/sdk ndk.dir=/Users/xujian/Documents/Android_eclipse/android_DEV/android-ndk-r10
在找到gradle.properties文件添加
android.useDeprecatedNdk=true
接下来在app module目录下的build.gradle中设置库文件名(生成的so文件名)。找到gradle文件的defaultConfig这项,在里面添加如下内容:
defaultConfig { ...... //定义使用ndk ndk{ moduleName "hellojni" //生成的so名字 abiFilters "armeabi", "armeabi-v7a", "x86" //输出指定三种abi体系结构下的so库。目前可有可无。 } }
接下来就是编译工程运行就可以了。
相关文章推荐
- Android问题集锦转载之四:Android NDK: APP variable defined to unknown applications: hello-jni
- android ubuntu jni so 报错Java_com_gcx_ndkjni_HelloNdkJni_stringFromNDKJNI
- Android Studio and NDK Integration on Windows Step by Step with a Hello JNI example
- Android Studio ndk-Jni开发详解
- hello-jni Android.mk文件简析
- 天天Android 20101116 运行hello-jni
- android利用jni调用第三方库——第三篇——编写库android程序整合第三方库libhello.so到自己的库libhelloword.so
- android_hello-jni
- JNI--Android 和C++的相互调用之--Hello From CPP
- android studio NDK-JNI调用
- android ubuntu jni so 报错Java_com_gcx_ndkjni_HelloNdkJni_stringFromNDKJNI
- [置顶] android利用jni调用第三方库——第三篇——编写库android程序整合第三方库libhello.so到自己的库libhelloword.so
- [置顶] android利用jni调用第三方库——第二篇——编写库android程序直接调用第三方库libhello.so
- android利用jni调用第三方库——第二篇——编写库android程序直接调用第三方库libhello.so
- 【android NDK JNI】android-ndk-r9d+adt-bundle-windows环境搭建-Hello-jni案例说明
- hello-gdbserver:A debuggable JNI example for Android
- cygwin编译win7cocos2d-x android项目报"cc1plus.exe: fatal error: jni/hellocpp/main.cpp: Permission denied“
- Ubuntu下编译androidJNI helloJNI
- Android_ndk_jni_hello-jni_hacking
- Android Studio ndk-Jni开发详细入门,Aes加密demo