- 下载NDK并且安装:
- 创建NDK任务:
- 创建完成后的文件夹样式:
布局代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical"
>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入第一个数字:"
android:id="@+id/one_num"
/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入符号:"
android:id="@+id/js_fh"
/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入第二个数字:"
android:id="@+id/two_num"
/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/get"
android:text="计算求值"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:id="@+id/sum"
/>
</LinearLayout>
java代码:
package com.example.myapplication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private TextView onenum;
private TextView twonum;
private TextView fh_num;
private Button get;
private TextView textView;
// Used to load the 'native-lib' library on application startup.
static {
System.loadLibrary("native-lib");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Example of a call to a native method
onenum = findViewById(R.id.one_num);
twonum = findViewById(R.id.two_num);
fh_num = findViewById(R.id.js_fh);
textView = findViewById(R.id.sum);
get = findViewById(R.id.get);
get.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int num1 = Integer.parseInt(onenum.getText().toString());
int num2 = Integer.parseInt(twonum.getText().toString());
char[] fh = fh_num.getText().toString().toCharArray();
int sum = getNum(num1, num2, fh[0]);
textView.setText("计算的值为:"+sum+"");
}
});
}
/**
* A native method that is implemented by the 'native-lib' native library,
* which is packaged with this application.
*/
public native String stringFromJNI();
public native int getNum(int a,int b,char fh);
}
C++代码:
#include <jni.h>
#include <string>
extern "C" JNIEXPORT jstring JNICALL
Java_com_example_myapplication_MainActivity_stringFromJNI(
JNIEnv *env,
jobject /* this */) {
std::string hello = "Hello from C++ 这是C的文件";
return env->NewStringUTF(hello.c_str());
}
extern "C"
JNIEXPORT jint JNICALL
Java_com_example_myapplication_MainActivity_getNum(JNIEnv *env, jobject instance, jint a, jint b,jchar fh) {
// TODO
switch (fh){
case '+':
return a+b;
case '-':
return a-b;
case '*':
return a*b;
case '/':
return a/b;
}
return 0;
}