#android #java #jni #sdk #api

droid-wrap

用于Rust的Android API的高级封装

16 releases

0.2.5 Jul 11, 2024
0.2.4 Jul 10, 2024
0.1.9 Jul 6, 2024
0.1.6 Jun 27, 2024

#57 in Audio

Download history 133/week @ 2024-06-10 333/week @ 2024-06-17 417/week @ 2024-06-24 463/week @ 2024-07-01 790/week @ 2024-07-08

2,136 downloads per month

Apache-2.0

1MB
4.5K SLoC

用于Rust的Android API的高级封装

介绍

这个箱子提供对Android API的高级封装,依赖于jni-rs库,这包括以下内容:

  1. 消除函数调用时的unsafe;
  2. 本地化类型,例如把java原始类型boolean转换到rust的基本类型bool;
  3. 规范命名规则,例如把以小写开头字母的驼峰命名式的函数统一为下划线命名法;
  4. 添加必要的官方说明,以便于随时查阅;
  5. 实现内存自动管理;
  6. 简化调用,让代码更整洁。

当您如果在尝试封装类似的功能函数时,请优先考虑上述规则。

特点

  • Java 动态代理,使用Rust函数实现java接口的方法;
  • 提供常用的Android API;
  • API调用符合rust代码规范;
  • 拥有完整的测试,覆盖每个函数调用;
  • 构建和使用简单;
  • 多线程安全。

使用

  1. 环境配置 在使用之前需要确保配置Android SDK和Java环境。
    • ANDROID_HOME: 指向Android SDK的根目录路径。
    • JAVA_HOME: 指向jre或者jdk的根目录路径。 注意:我们不使用javac来编译生成java字节码,所以无须使用完整的JDK环境,仅使用JRE(Java 运行时)即可。
  2. 安装apk打包工具
    cargo install cargo-apk
    
  3. 运行示例
    git clone https://gitcode.net/mzdk100/droid-wrap.git
    cd droid-wrap
    cargo apk run -p droid-wrap-example --example activity-example
    cargo apk run -p droid-wrap-example --example java-example
    
  4. 运行测试
    cargo apk run -p droid-wrap-test --all-features
    

如需了解更多信息,请查看example目录中的代码示例。

分类

这些功能函数的分类使用条件编译的方式被链接到程序中。使用时,请将这个箱子作为可选依赖项,并指定相关的feature,这是防止编译不必要的代码从而让程序体积的不断膨胀。

安卓(android)

安卓应用(android_app)

提供Activity类的常用API。

安卓内容(android_content)

  1. android.content.Context;
  2. android.content.ContextWrapper;
  3. android.content.Intent。;

安卓系统(android_os)

  1. android.os.Bundle;
  2. android.os.VibrationEffect;
  3. android.os.Vibrator;
  4. android.os.VibratorManager;
  5. android.os.Build;
  6. android.os.SystemProperties;
  7. android.os.Build_VERSION_CODES;
  8. android.os.Build_VERSION;
  9. android.os.SystemProperties_Handle;

安卓语音(android_speech)

android.speech.tts.TextToSpeech的API等。

安卓文本(android_text)

已经实现下列接口:

  1. android.text.Editable;
  2. android.text.InputType;
  3. android.text.TextWatcher;

安卓视图(android_view)

android.view.View的API等(包括点击监听器的实现)。

  1. android.view.View;
  2. android.view.ViewGroup;
  3. android.view.View_OnClickListener;
  4. android.view.ViewGroup_LayoutParams;
  5. android.view.ViewGroup_MarginLayoutParams;
  6. android.view.ViewManager;
  7. android.view.WindowManager;
  8. android.view.Display;
  9. android.view.inputmethod.InputMethodManager;
  10. android.view.KeyEvent;
  11. android.view.InputEvent;
  12. android.view.inputmethod.EditorInfo;
  13. android.view.View_OnLongClickListener;
  14. android.view.ViewParent;
  15. android.view.View_OnKeyListener;

安卓小部件(android_widget)

常用的一些UI小部件:

  1. android.widget.TextView;
  2. android.widget.EditText;
  3. android.widget.Button;
  4. android.widget.LinearLayout;
  5. android.widget.LinearLayout_LayoutParams;
  6. android.widget.TextView_OnEditorActionListener;

java功能(java)

java语言内置(java_lang)

实现了java.lang.String,java.lang.Integer等类型。

  1. java.lang.Boolean;
  2. java.lang.Float;
  3. java.lang.Object;
  4. java.lang.String;
  5. java.lang.Integer;
  6. java.lang.CharSequence;
  7. java.lang.Runnable;
  8. java.lang.System;
  9. java.lang.reflect.Executable;

java缓冲区(java_nio)

实现了java.nio.ByteBuffer等类型。

Dependencies

~1–13MB
~103K SLoC