用于Rust的Android API的高级封装
GitCode GitHub crates.io docs.rs
介绍
这个箱子提供对Android API的高级封装,依赖于jni-rs库,这包括以下内容:
- 消除函数调用时的unsafe;
- 本地化类型,例如把java原始类型boolean转换到rust的基本类型bool;
- 规范命名规则,例如把以小写开头字母的驼峰命名式的函数统一为下划线命名法;
- 添加必要的官方说明,以便于随时查阅;
- 实现内存自动管理;
- 简化调用,让代码更整洁。
当您如果在尝试封装类似的功能函数时,请优先考虑上述规则。
特点
- Java 动态代理,使用Rust函数实现java接口的方法;
- 提供常用的Android API;
- API调用符合rust代码规范;
- 拥有完整的测试,覆盖每个函数调用;
- 构建和使用简单;
- 多线程安全。
使用
- 环境配置
在使用之前需要确保配置Android SDK和Java环境。
- ANDROID_HOME: 指向Android SDK的根目录路径。
- ANDROID_BUILD_TOOLS_VERSION: 例如"35.0.0"。
- ANDROID_API_LEVEL: 例如35。
- JAVA_HOME: 指向jre或者jdk的根目录路径。 注意:我们不使用javac来编译生成java字节码,所以无须使用完整的JDK环境,仅使用JRE(Java 运行时)即可。
- 安装apk打包工具
cargo install cargo-apk2
- 运行示例
git clone https://gitcode.net/mzdk100/droid-wrap.git cd droid-wrap cargo apk2 run -p droid-wrap-example --example activity-example cargo apk2 run -p droid-wrap-example --example java-example
- 运行测试
cargo apk2 run -p droid-wrap-test --all-features
如需了解更多信息,请查看example目录中的代码示例。
关于构建工具
cargo-apk2是一个更加轻量级的安卓apk打包工具,他从已经弃用的cargo-apkfork而来,cargo-apk2将持续维护,可放心使用。 同时本项目中提供了一个cargo-aapt2的cargo扩展程序,如果您对打包apk有更高的需求,可以使用此扩展。
分类
这些功能函数的分类使用条件编译的方式被链接到程序中。使用时,请将这个箱子作为可选依赖项,并指定相关的feature,这是防止编译不必要的代码从而让程序体积的不断膨胀。
安卓(android)
安卓应用(android_app)
提供Activity类的常用API。
安卓内容(android_content)
- android.content.Context;
- android.content.ContextWrapper;
- android.content.Intent。;
- android.content.ComponentName;
- android.content.ComponentName_WithComponentName;
安卓硬件(android_hardware)
- android.hardware.Camera;
- android.hardware.vibrator.Effect;
- android.hardware.vibrator.EffectStrength;
安卓系统(android_os)
- android.os.Bundle;
- android.os.VibrationEffect;
- android.os.Vibrator;
- android.os.VibratorManager;
- android.os.Build;
- android.os.SystemProperties;
- android.os.Build_VERSION_CODES;
- android.os.Build_VERSION;
- android.os.SystemProperties_Handle;
安卓语音(android_speech)
android.speech.tts.TextToSpeech的API等。
安卓文本(android_text)
已经实现下列接口:
- android.text.Editable;
- android.text.InputType;
- android.text.TextWatcher;
安卓视图(android_view)
android.view.View的API等(包括点击监听器的实现)。
- android.view.View;
- android.view.ViewGroup;
- android.view.View_OnClickListener;
- android.view.ViewGroup_LayoutParams;
- android.view.ViewGroup_MarginLayoutParams;
- android.view.ViewManager;
- android.view.WindowManager;
- android.view.Display;
- android.view.inputmethod.InputMethodManager;
- android.view.KeyEvent;
- android.view.InputEvent;
- android.view.inputmethod.EditorInfo;
- android.view.View_OnLongClickListener;
- android.view.ViewParent;
- android.view.View_OnKeyListener;
- android.view.Window;
- android.view.ContextThemeWrapper;
- android.view.SurfaceHolder;
- android.view.Surface;
安卓小部件(android_widget)
常用的一些UI小部件:
- android.widget.TextView;
- android.widget.EditText;
- android.widget.Button;
- android.widget.LinearLayout;
- android.widget.LinearLayout_LayoutParams;
- android.widget.TextView_OnEditorActionListener;
java功能(java)
javaIO操作(java_io)
实现了java.io.File等。
- java.io.File;
- java.io.Serializable;
java语言内置(java_lang)
实现了java.lang.String,java.lang.Integer等类型。
- java.lang.Boolean;
- java.lang.Float;
- java.lang.Object;
- java.lang.String;
- java.lang.Integer;
- java.lang.CharSequence;
- java.lang.Runnable;
- java.lang.System;
- java.lang.reflect.Executable;
- java.lang.Comparable;
java缓冲区(java_nio)
实现了java.nio.ByteBuffer等类型。
- java.nio.ByteBuffer;
- java.nio.file.Path;