使用jni计算两个数字的结果

本文介绍如何使用JNI在Android应用中实现两个整数的加法运算。通过创建C语言源文件并利用Android.mk进行编译,最终在Java层调用本地方法完成计算,并展示结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在上一篇博客中介绍了在Android中使用jni,这篇博客介绍使用jni计算两个数字的和

首先看一下实现的效果



实现方式(省略了部分步骤,详细步骤请看我的上一篇博客在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);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值