使用jni计算两个数字的结果
2016-05-10 18:34
344 查看
在上一篇博客中介绍了在Android中使用jni,这篇博客介绍使用jni计算两个数字的和
首先看一下实现的效果
![](https://oscdn.geek-share.com/Uploads/Images/Content/202008/19/1fc98a5b6d54f7136febf8a8c086cda9)
实现方式(省略了部分步骤,详细步骤请看我的上一篇博客在Android中使用jni)
第一步:在jni文件夹下新建一个Android.mk文件,并且在Android.mk中添加下面的代码
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
#编译生成的文件的类库叫什么名字
LOCAL_MODULE := hello
#要编译的c文件
LOCAL_SRC_FILES := hello.c
include $(BUILD_SHARED_LIBRARY)
第二步:在jni文件夹下新建一个hello.c文件,并且在hello.c中添加下面的代码
#include <jni.h>
/**
* 这个是实现两个数字相加的函数
* 第一个参数:java虚拟机的内存地址
* 第二个参数:调用add方法的java对象
* 第三个参数:第一个加数
* 第四个参数:第二个加数
*/
jint Java_com_example_adddemo_MainActivity_add(JNIEnv* env, jobject obj, jint i, jint j) {
return i + j;
}
第三步:为了兼容更多的平台,在jni文件夹下新建一个Application.mk文件,并在Application.mk中添加下面的代码,使得最后生成的so文件可以兼容intel架构
#生成intel架构的so文件,默认状态下只能生成arm架构的so文件
APP_ABI := armeabi armeabi-v7a x86
第四步:编译jni,编译成功后可以看到在libs文件夹下生成了so文件
![](https://oscdn.geek-share.com/Uploads/Images/Content/202008/19/4d98e12e7756f5c57129113d00e14f23)
第五步:修改activity_main.xml文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<!-- 第一个加数输入框 -->
<EditText
android:id="@+id/et_number1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="第一个数字"
android:inputType="number"/>
<!--显示加号 -->
<TextView
android:id="@+id/et_add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="+"
android:textSize="20sp"/>
<!-- 第二个加数输入框 -->
<EditText
android:id="@+id/et_number2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="第二个数字"
android:inputType="number"/>
<!-- 显示等于号 -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="="
android:textSize="20sp"/>
<!-- 显示结果 -->
<TextView
android:id="@+id/tv_result"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""
android:textSize="20sp"/>
</LinearLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<!-- 计算按钮 -->
<Button
android:id="@+id/et_sum"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="计算"
android:onClick="click"/>
</RelativeLayout>
</LinearLayout>
最后一步:修改MainActivity.java文件
package com.example.adddemo;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
static {
//加载打包完毕的so类库
System.loadLibrary("hello");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
//计算按钮响应函数
public void click(View view) {
//获得布局文件上的控件
EditText et_number1 = (EditText) findViewById(R.id.et_number1);
EditText et_number2 = (EditText) findViewById(R.id.et_number2);
TextView tv_result = (TextView) findViewById(R.id.tv_result);
//获得用户输入的字符串
String numberStr1 = et_number1.getText().toString();
String numberStr2 = et_number2.getText().toString();
//当用户没有输入数字
if(numberStr1.equals("") || numberStr2.equals("")) {
//使用吐司对话框提示用户输入数字
Toast.makeText(this, "请输入两个执行相加运算的数字", Toast.LENGTH_SHORT).show();
return;
}
//将用户输入的字符串转换成数字
int number1 = Integer.parseInt(numberStr1);
int number2 = Integer.parseInt(numberStr2);
//计算两个数相加的结果
int number3 = add(number1, number2);
//显示两个数字相加的结果
tv_result.setText(number3 + "");
}
//定义一个本地方法,实现两个数字相加,方法体由c语言实现
public native int add(int number1, int number2);
}
首先看一下实现的效果
实现方式(省略了部分步骤,详细步骤请看我的上一篇博客在Android中使用jni)
第一步:在jni文件夹下新建一个Android.mk文件,并且在Android.mk中添加下面的代码
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
#编译生成的文件的类库叫什么名字
LOCAL_MODULE := hello
#要编译的c文件
LOCAL_SRC_FILES := hello.c
include $(BUILD_SHARED_LIBRARY)
第二步:在jni文件夹下新建一个hello.c文件,并且在hello.c中添加下面的代码
#include <jni.h>
/**
* 这个是实现两个数字相加的函数
* 第一个参数:java虚拟机的内存地址
* 第二个参数:调用add方法的java对象
* 第三个参数:第一个加数
* 第四个参数:第二个加数
*/
jint Java_com_example_adddemo_MainActivity_add(JNIEnv* env, jobject obj, jint i, jint j) {
return i + j;
}
第三步:为了兼容更多的平台,在jni文件夹下新建一个Application.mk文件,并在Application.mk中添加下面的代码,使得最后生成的so文件可以兼容intel架构
#生成intel架构的so文件,默认状态下只能生成arm架构的so文件
APP_ABI := armeabi armeabi-v7a x86
第四步:编译jni,编译成功后可以看到在libs文件夹下生成了so文件
第五步:修改activity_main.xml文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<!-- 第一个加数输入框 -->
<EditText
android:id="@+id/et_number1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="第一个数字"
android:inputType="number"/>
<!--显示加号 -->
<TextView
android:id="@+id/et_add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="+"
android:textSize="20sp"/>
<!-- 第二个加数输入框 -->
<EditText
android:id="@+id/et_number2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="第二个数字"
android:inputType="number"/>
<!-- 显示等于号 -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="="
android:textSize="20sp"/>
<!-- 显示结果 -->
<TextView
android:id="@+id/tv_result"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""
android:textSize="20sp"/>
</LinearLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<!-- 计算按钮 -->
<Button
android:id="@+id/et_sum"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="计算"
android:onClick="click"/>
</RelativeLayout>
</LinearLayout>
最后一步:修改MainActivity.java文件
package com.example.adddemo;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
static {
//加载打包完毕的so类库
System.loadLibrary("hello");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
//计算按钮响应函数
public void click(View view) {
//获得布局文件上的控件
EditText et_number1 = (EditText) findViewById(R.id.et_number1);
EditText et_number2 = (EditText) findViewById(R.id.et_number2);
TextView tv_result = (TextView) findViewById(R.id.tv_result);
//获得用户输入的字符串
String numberStr1 = et_number1.getText().toString();
String numberStr2 = et_number2.getText().toString();
//当用户没有输入数字
if(numberStr1.equals("") || numberStr2.equals("")) {
//使用吐司对话框提示用户输入数字
Toast.makeText(this, "请输入两个执行相加运算的数字", Toast.LENGTH_SHORT).show();
return;
}
//将用户输入的字符串转换成数字
int number1 = Integer.parseInt(numberStr1);
int number2 = Integer.parseInt(numberStr2);
//计算两个数相加的结果
int number3 = add(number1, number2);
//显示两个数字相加的结果
tv_result.setText(number3 + "");
}
//定义一个本地方法,实现两个数字相加,方法体由c语言实现
public native int add(int number1, int number2);
}
相关文章推荐
- iOS quartzCore第八章—— CATextLayer的运用
- JPA使用指南 javax.persistence的注解配置
- 添加php命令到全局变量-centos
- 写代码的逻辑原则
- AOSP建立本地mirror,更新,以及切换分支
- ART是一个安装程序?或者一个操作系统?或者是一个虚拟机?
- codeforces466E 并查集+离线处理+dfs
- manachar算法学习笔记
- flashcache之hash
- Retrofit2实现缓存。离线缓存、在线缓存及@headers控制缓存时间
- C++第5次作业
- Oracle常用的数据字典
- css浮动float的使用示例
- Android四大基本组件
- 正则表达式
- 机器学习中的归一化方法(Normalization Method)
- Android防止过快点击造成多次事件 一行代码搞定,特别简单,可以复用
- myeclipse和eclipse中修改Tomcat 的端口
- JUnit4高级篇-由浅入深
- 验证码