刚步入社会的Android小白,记录如何使用android studio生成静态jni库。
1.准备工作:
先安装ndk,自己先百度一下,后期博主会专门写一篇博文讲解一下Android Studio 如何安装。
新建一个工程JniFirst,在MainAcitvit中声明要用到的方法(so库中的方法)
public class MainActivity extends AppCompatActivity {
private static String TAG="MainActivity";
static
{
System.loadLibrary("JNITest2");//名字注意,需要跟你的build.gradle ndk节点moduleName一样
}
public native String OutHelloWorld();//声明方法!!
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(TAG,OutHelloWorld());
}
}
在根目录下的gradle.properties文件中加入android.useDeprecatedNdk=true,目的是解决NDK版本低不能自动编译的问题;
在app\build.gradle文件中加入ndk节点,如下图:
点击Build->Make Project,在app\build\intermediates\classes\debug\目录下生成.class文件。在Android Studio中Terminal框中,进入app\build\intermediates\classes\debug\目录下执行 javah qumy.com.jnitest.ManiActivity,在该目录下生成一个qumy_com_jnitest_ManiActivity.h文件。
将qumy_com_jnitest_ManiActivity.h复制到app\src\main\jni(新建),再新建qumy_com_jnitest_ManiActivity.c文件,在qumy_com_jnitest_ManiActivity.c中实现方法。
qumy_com_jnitest_ManiActivity.cpp
#include "qumy_com_jnitest_MainAcitvity.h"
JNIEXPORT jstring JNICALL Java_qumy_com_jnitest_MainActivity_OutHelloWorld
(JNIEnv *env, jobject obj){
return env->NewStringUTF("Hello World");
}
qumy_com_jnitest_ManiActivity
.h
#include <jni.h>
/* Header for class qumy_com_createjnistatic_JniUtil */
#ifndef _Included_qumy_com_createjnistatic_JniUtil
#define _Included_qumy_com_createjnistatic_JniUtil
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: qumy_com_createjnistatic_JniUtil
* Method: OutString
* Signature: (Ljava/lang/String;)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_qumy_com_createjnistatic_JniUtil_OutString
(JNIEnv *, jobject, jstring);
#ifdef __cplusplus
}
#endif
#endif
执行Build->Make Project,在app\build\intermediates\ndk\debug目录下生成.so库,如图
2.调用Jni库中的方法
在OnCreate中调用OutHelloWorld(),将结果输出到Log中,如下图: