如何androd動態註冊編寫計算器

直接開上es開魯,配置我們就不用多說了。

建立layout;

在之後寫debug時候回出現亂掉的情況,可以直接慢慢除錯

如何androd動態註冊編寫計算器

在紅圈中是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;@Overrideprotected 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() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubswitch (v。getId()) {case R。id。add://獲取編輯框值float轉stringone = 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轉stringone = 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轉stringone = 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轉stringone = 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//繫結相應IDfirst = 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 += -lloginclude $(BUILD_SHARED_LIBRARY) #

最後需要在java層載入。so檔案,就可以直接執行編譯了。

如何androd動態註冊編寫計算器

該文章屬於:猴子游戲程式設計原創

轉載請註明標題:如何androd動態註冊編寫計算器-猴子技術宅

轉載請註明出處:

https://www。ssfiction。com/andiordadb/41030。html