您的位置 首页 java

如何androd动态注册编写计算器

直接开上es开鲁,配置我们就不用多说了。

创建layout; 在之后写debug时候回出现乱掉的情况,可以直接慢慢调试

在红圈中是layout基本设置,设置好,当然,我们不是做安卓开发,不需要做适配。只是知道原理就好。

java层代码:

申明变量->绑定方法->定义native方法->按钮绑定监听~~

 package com.example.jsuanq;

import javax.security.auth.PrivateCredentialPermission;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {

//编辑框
private EditText first;
 private  EditText second;
//按钮
private Button add;
private Button sub;
private Button mul;
private Button div;
//获取值
private float one;
private float two;
@ Override 
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//首先初始化控件
init();

//开始运算
yunsuan();
}

//运算方法
private void yunsuan() {
// TODO Auto-generated method stub
//按钮绑定监听,在add.set导包import,之后控件绑定 final最终字段不会被修改
final OnClickListener cl = new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.add:
//获取编辑框值float转string
one = Float.parseFloat(first.getText().toString());
two = Float.parseFloat(second.getText().toString());
//在调用函数后面+“”表示获取是字符
Toast.makeText(MainActivity.this, add(one,two)+"", 1).show();
break;
case R.id.sub:
//获取编辑框值float转string
one = Float.parseFloat(first.getText().toString());
two = Float.parseFloat(second.getText().toString());
Toast.makeText(MainActivity.this, sub(one,two)+"", 1).show();
break;
case R.id.mul:
//获取编辑框值float转string
one = Float.parseFloat(first.getText().toString());
two = Float.parseFloat(second.getText().toString());
Toast.makeText(MainActivity.this, mul(one,two)+"", 1).show();
break;
case R.id.div:
//获取编辑框值float转string
one = Float.parseFloat(first.getText().toString());
two = Float.parseFloat(second.getText().toString());
Toast.makeText(MainActivity.this, div(one,two)+"", 1).show();
break;
default:
break;
}
}
};
add.setOnClickListener(cl);
sub.setOnClickListener(cl);
mul.setOnClickListener(cl);
div.setOnClickListener(cl);
}

private void init() {
// TODO Auto-generated method stub
//绑定相应ID
first = findViewById(R.id.editText1);
second = findViewById(R.id.editText2);
//绑定按钮
add = findViewById(R.id.add);
sub = findViewById(R.id.sub);
mul = findViewById(R.id.mul);
div = findViewById(R.id.div);
}
//定义native方法,在so层;私有最小化
private native float add(float one,float two);
private native float sub(float one,float two);
private native float mul(float one,float two);
private native float div(float one,float two);
}  

创建文件 JNI ->创建.c文件~~

自定义函数;其中在ndk开发中,类型都需要加上j开头来规范。

sizeof(nativeMethod)/sizeof(nativeMethod[0],类的总大小/类元素大小

JNI_VERSION_1_4;jni版本号的写法

 #include
//不需要自定义,直接使用jni导入
jfloat addc(JNIEnv* env,jobject obj,jfloat a,jfloat b){
return a+b;
}
jfloat subc(JNIEnv* env,jobject obj,jfloat a,jfloat b){
return a-b;
}
jfloat mulc(JNIEnv* env,jobject obj,jfloat a,jfloat b){
return a

//绑定c层和java层
JNINativeMethod nativeMethod[]={
{"add","(FF)F",(void*)addc},
{"sub","(FF)F",(void*)subc},
{"mul","(FF)F",(void*)mulc},
{"div","(FF)F",(void*)divc}
};
//注册函数
jint rgisterNative(JNIEnv* env){

//获取类
jclass pclazz = (*env)->FindClass(env, "com/example/jsuanq/MainActivity");
//注册
//(env)->RegisterNatives(env,pclass,nativeMethod,sizeof(nativeMethod)/sizeof(nativeMethod[0]));
//判断
if((env)->RegisterNatives(env, pclazz, nativeMethod, sizeof(nativeMethod)/sizeof(nativeMethod[0]))!=JNI_OK){
return JNI_ERR;//-1
}
return JNI_OK;//1
}
//使用JNI_OnLoad动态注册
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM vm, void reserved){
JNIEnv env;

if((vm)->GetEnv(vm, (void*)&env, JNI_VERSION_1_4)!=JNI_OK){
return JNI_ERR;
}
if(rgisterNative(env)!=JNI_OK){
return JNI_ERR;
}
return JNI_VERSION_1_4;
}  

在jni加入2个mk文件,其中android.mk中:

mk文件的编写可以参考 :ndk开发中静态/动态生成so文件mk配置写法

下面是需要在adroid.mk中需要修改的参数;

 
LOCAL_PATH := $(call my-dir)  

 include $(CLEAR_VARS) LOCAL_MODULE    := ssfiction    #需要修改的地方

LOCAL_SRC_FILES := ssfiction.c #需要修改的地方

LOCAL_ARM_MODE := arm 

LOCAL_LDLIBS += -llog

include $(BUILD_SHARED_LIBRARY) #  

最后需要在java层加载.so文件,就可以直接运行编译了。

该文章属于:猴子游戏编程原创

转载请注明标题:如何androd动态注册编写计算器-猴子技术宅

转载请注明出处:

文章来源:智云一二三科技

文章标题:如何androd动态注册编写计算器

文章地址:https://www.zhihuclub.com/188992.shtml

关于作者: 智云科技

热门文章

网站地图