Android Studio 使用jni

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/quanyechacsdn/article/details/79149245

初次接触,一头雾水。然而做下来之后,也是很简单的,按步骤来就行

这次是接到一个Android 通过wifi控制硬件的项目,没做过啊,什么事情都有个开始的,先实现Android和c的通信:

  • 首先给Android Studio配置ndk环境,这个网上很多,就不多说了
  • 配置工程ndk属性
  • 配置项目ndk属性
  • 写一个java类,作用是加载生成的库文件和声明需要实现的方法(方法会用c实现,Android 调用)
  • 使用AS编译器Terminal编译java类,生成.h文件
  • 在main文件夹下创建jni文件夹,新建.c文件,复制.h的内容到.c,并实现文件中对应方法
  • 在Android代码中调用

具体实现

1,配置工程ndk,在工程的gradle.properties下添加:android.useDeprecatedNdk=true
2,配置项目ndk,在module的build.gradle中,defaultConfig之下, ( moduleName “MyJni”的值和java类中 System.loadLibrary(“MyJni”)一致)
defaultConfig {
applicationId “–.–.–”
minSdkVersion 15
targetSdkVersion 26
versionCode 1
versionName “1.0”

    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    ndk{
        moduleName "MyJni"
    }
}

3,新建一个java,可以在包名下新建,也可以是别的路径
public class MyJni {
static {
System.loadLibrary(“MyJni”);
}

public static native String getWorld();

}

4,打开AS的terminal,进到项目的main/java路径,cd E:\android\application\project\MyJniTest\src\main\java,执行javah -jni package(包名).MyJni,这里需要注意MyJni路径;执行完生成一个.h文件,

5,在src/main之下创建jni文件夹,在jni下新建myctest.c,名字自己定义,实现里面的方法
JNIEXPORT jstring JNICALL Java_com_xhs_jni_jni_MyJni_getWorld
(JNIEnv *env, jclass object){
return (*env)->NewStringUTF(env,”就是这样的”);
};

6,在Android 中调用:
public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    TextView text1 = (TextView) findViewById(R.id.text1);
    MyJni myJni = new MyJni();
    text1.setText(myJni.getWorld());
}

}

这就成功实现Android和c的通信

猜你喜欢

转载自blog.csdn.net/quanyechacsdn/article/details/79149245