android studio项目要求:1、n!算法由c语言或c++语言,单独由一个函数实现; 2、设计者姓名,由c语言或c++语言实现,单独由一个函数返回; 3、学号,由c语言或c++语言实现,单独由一个函数返回; 4、点击“计算”按钮后,先判断数值输入框是否是一个合法的整数,若是,则通过JNI接口获取算法实现结果、设计者姓名及学号;若不是,则弹出提示信息,并将放置3个返回值的文本控件置空。写出代码
时间: 2023-12-01 09:04:12 浏览: 141
android studio实现计算器
这是一个基本的 Android Studio 项目框架,其中包含了一个按钮和三个文本框控件,用于获取并显示算法结果、设计者姓名和学号。在这个项目中,我们将使用 C++ 编写一个阶乘算法,并通过 JNI 接口将其集成到 Android 项目中。
首先,我们需要在 Android Studio 中创建一个新的 C++ 模块,并将其添加到我们的项目中。这可以通过以下步骤完成:
1. 打开 Android Studio,并打开我们的项目。
2. 在项目视图中,右键单击“app”文件夹,并选择“New”->“Module”。
3. 在弹出的对话框中,选择“C++ Library”,然后单击“Next”。
4. 在下一个对话框中,输入模块的名称和其他选项,然后单击“Finish”。
5. 等待 Android Studio 完成 C++ 模块的创建过程。
创建完成后,我们可以开始编写我们的阶乘算法和 JNI 接口代码。这可以通过以下步骤完成:
1. 在我们的 C++ 模块中,创建一个名为“factorial”的新文件,并在其中编写阶乘算法的实现。例如:
```c++
#include <jni.h>
extern "C" JNIEXPORT jint JNICALL
Java_com_example_myapplication_MainActivity_factorial(JNIEnv *env, jobject thiz, jint n) {
jint result = 1;
for (int i = 1; i <= n; i++) {
result *= i;
}
return result;
}
```
2. 在同一个文件中,创建另一个名为“getDesignerName”的函数,用于返回设计者姓名。例如:
```c++
#include <jni.h>
extern "C" JNIEXPORT jstring JNICALL
Java_com_example_myapplication_MainActivity_getDesignerName(JNIEnv *env, jobject thiz) {
return env->NewStringUTF("Your Name");
}
```
3. 创建一个名为“getStudentID”的函数,用于返回学生 ID。例如:
```c++
#include <jni.h>
extern "C" JNIEXPORT jstring JNICALL
Java_com_example_myapplication_MainActivity_getStudentID(JNIEnv *env, jobject thiz) {
return env->NewStringUTF("Your Student ID");
}
```
4. 在我们的 Android 项目中,创建一个名为“MainActivity”的 Java 类,并添加以下代码:
```java
public class MainActivity extends AppCompatActivity {
static {
System.loadLibrary("native-lib");
}
private EditText inputNumber;
private TextView resultText;
private TextView designerNameText;
private TextView studentIDText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
inputNumber = findViewById(R.id.input_number);
resultText = findViewById(R.id.result_text);
designerNameText = findViewById(R.id.designer_name_text);
studentIDText = findViewById(R.id.student_id_text);
Button calculateButton = findViewById(R.id.calculate_button);
calculateButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String input = inputNumber.getText().toString();
if (input.matches("^\\d+$")) {
int n = Integer.parseInt(input);
int result = factorial(n);
String designerName = getDesignerName();
String studentID = getStudentID();
resultText.setText(String.valueOf(result));
designerNameText.setText(designerName);
studentIDText.setText(studentID);
} else {
Toast.makeText(MainActivity.this, "Invalid input", Toast.LENGTH_SHORT).show();
resultText.setText("");
designerNameText.setText("");
studentIDText.setText("");
}
}
});
}
public native int factorial(int n);
public native String getDesignerName();
public native String getStudentID();
}
```
在这个类中,我们定义了三个文本框控件和一个按钮,以及与 JNI 接口相关的三个函数:factorial、getDesignerName 和 getStudentID。在点击“计算”按钮时,我们首先检查输入是否为有效的整数,如果是,则通过 JNI 接口获取算法结果、设计者姓名和学号,并将它们显示在对应的文本框控件中。如果输入无效,则弹出一个提示信息,并清空所有文本框控件。
5. 在我们的 Android 项目中,打开“app”模块下的“build.gradle”文件,并添加以下行:
```groovy
externalNativeBuild {
cmake {
cppFlags "-std=c++11"
abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
}
}
```
这将启用 C++ 编译器,并指定我们支持的 CPU 架构。
6. 在同一文件中,添加以下行:
```groovy
android {
defaultConfig {
externalNativeBuild {
cmake {
cppFlags "-std=c++11"
}
}
}
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
}
```
这将告诉 Android Studio 使用我们的 C++ 代码进行构建,并指定 CMakeLists.txt 文件的位置。
7. 在项目视图中,右键单击“app”文件夹,并选择“New”->“Folder”->“JNI Folder”。在弹出的对话框中,选择“src/main”,然后单击“Finish”。
8. 在刚创建的“jni”文件夹中,创建一个名为“Android.mk”的新文件,并添加以下内容:
```makefile
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := native-lib
LOCAL_SRC_FILES := native-lib.cpp
include $(BUILD_SHARED_LIBRARY)
```
这将定义我们的模块名称和源代码文件。
9. 在同一文件夹中,创建一个名为“Application.mk”的新文件,并添加以下内容:
```makefile
APP_ABI := all
APP_STL := c++_shared
```
这将指定我们支持所有 CPU 架构,并使用共享的 C++ 运行库。
10. 在项目视图中,右键单击“app”文件夹,并选择“New”->“Folder”->“cpp”。在弹出的对话框中,选择“src/main/jni”,然后单击“Finish”。
11. 在刚创建的“cpp”文件夹中,创建一个名为“CMakeLists.txt”的新文件,并添加以下内容:
```cmake
cmake_minimum_required(VERSION 3.4.1)
add_library(native-lib SHARED native-lib.cpp)
find_library(log-lib log)
target_link_libraries(native-lib ${log-lib})
```
这将定义我们的模块和源代码文件,并指定我们需要链接的库。
至此,我们的 Android Studio 项目就完成了。现在可以编译并运行它,然后测试我们的阶乘算法和 JNI 接口。
阅读全文