nofollow标签对网站收录的影响,专业网站开发企业,广州服务好的网站推广工具,沈阳市城乡建设网站前提条件#xff1a;
本地已经配置好了ndk环境,如果没有配置好#xff0c;建议参考macos 配置ndk环境-CSDN博客 这篇链接。
新建一个Empty Project 比如我这里的Project的名字是HelloJNI#xff0c;包名是com.example.hellojni 然后在src目录下#xff0c;右键选择Add C …前提条件
本地已经配置好了ndk环境,如果没有配置好建议参考macos 配置ndk环境-CSDN博客 这篇链接。
新建一个Empty Project 比如我这里的Project的名字是HelloJNI包名是com.example.hellojni 然后在src目录下右键选择Add C to Module 然后展示的目录如下所示 在activity_main.xml里给TextView组件添加一个id,整体代码如下
?xml version1.0 encodingutf-8?
androidx.constraintlayout.widget.ConstraintLayout xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:apphttp://schemas.android.com/apk/res-autoxmlns:toolshttp://schemas.android.com/toolsandroid:layout_widthmatch_parentandroid:layout_heightmatch_parenttools:context.MainActivityTextViewandroid:idid/text_viewandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:textHello World!app:layout_constraintBottom_toBottomOfparentapp:layout_constraintLeft_toLeftOfparentapp:layout_constraintRight_toRightOfparentapp:layout_constraintTop_toTopOfparent //androidx.constraintlayout.widget.ConstraintLayout
然后在MainActivity.java里添加调用cpp层的代码调用cpp的库
static {System.loadLibrary(jnidemo);
}
写一个native方法
public native String stringFromJNI();
MainActivity.java代码整体如下
package com.example.hellojni;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.widget.TextView;public class MainActivity extends AppCompatActivity {static {System.loadLibrary(hellojni);}public native String stringFromJNI();Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);TextView textView findViewById(R.id.text_view);textView.setText(stringFromJNI());}
}
然后需要在jnidemo.cpp里写stringFromJNI的实现方法
#include jni.h
#include string
extern C
JNIEXPORT jstring JNICALL
Java_com_example_hellojni_MainActivity_stringFromJNI(JNIEnv* env,jobject) {std::string hello Hello From C;return env-NewStringUTF(hello.c_str());
} 其中cpp层这个方法的命名是Java_包名_类名_方法名
包名 com.example.hellojni类名 MainActivity方法名 stringFromJNI
第八行是一个string对象内容是“Hello From C”然后第九行是返回一个jni的string对象
这里的返回值就是给到了Java层的stringFromJNI的返回值。 最后MainActivity里通过展示这个string显示在视图上表示Java层调用cpp层的成功了。
看下运行结果