首页 > 其他分享 >为AppInventor2开发自己的拓展(Extension) - 拓展开发入门篇

为AppInventor2开发自己的拓展(Extension) - 拓展开发入门篇

时间:2024-09-11 18:49:28浏览次数:12  
标签:AppInventor2 appinventor Extension 拓展 components import android com

//为什么需要开发拓展?//

App Inventor 2 是积木式在线安卓开发环境,利用拖拽式的方式实现代码块堆叠,从而完成相应的逻辑。

上手很容易,但是由于代码块提供的功能有限,使用比较单一,在开发上有很大的局限性,但是它提供了拓展Extension特性,开放了源码,使得开发者可以根据自己的需要,自定义开发原生组件实现不了的、更加强大的功能

一般拓展采用java/kotlin语言进行开发,由于拓展开发相当于直接使用安卓原生开发语言开发安卓相关功能,因此理论上拓展可以实现任何的安卓功能。

注意:java/kotlin写出来的拓展只能运行于安卓设备上,对于iOS设备需要使用swift开发iOS版本的拓展。

//开发及编译环境配置//

  1. 安装好 Java开发环境 以及 Ant编译环境,这里以Windows为例,供参考:

    安装完JDK后配置环境变量 计算机(右键)→属性→高级系统设置→高级→环境变量

    图片

    新建JAVA_HOME:如果是默认安装路径那么就在这个路径下:C:\Program Files\Java\jdk1.8.0_171

    图片

    新建Classpath: .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar

    在Path后面新增:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; 注意:如果之前的path末尾没有;要手动加上

    配置完成后点击确定;cmd打开命令行,java -version ,显示java jdk的版本,配置成功

    图片

  2. 配置ant:ant用来将你的写完的自定义的Extension打包成aix文件,打包完成以后可以直接导入到app inventor中使用

    ANT_HOME 存放你ant的目录

    图片

     path           ; %ANT_HOME%\bin;
     classpath      ; %ANT_HOME%\lib;
    

    验证:cmd 命令行输入ant命令

    图片

    出现以上结果证明配置成功。

//源码下载//

https://github.com/mit-cml/appinventor-sources

国内下载非常非常缓慢,这个项目比较大,也许2天都下载不完,不过没关系,我们早已提供已下载好的工程源码,关注公众号(搜索“fun123cn”关注),回复“源码”即可免费下载MIT最新源码包。

//代码编写//

采用自己较为熟悉的java开发环境就行,这里推荐使用VSCode,拓展目录在 appinventor-sources/appinventor/components ,测试代码参考如下:

图片

演示版的完整代码(可编译运行)如下:

package cn.fun123.Clipboard;

import android.content.Context;
import android.util.Log;
import android.widget.Toast;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Intent;
import android.content.res.AssetFileDescriptor;
import android.net.Uri;

import com.google.appinventor.components.annotations.DesignerComponent;
import com.google.appinventor.components.annotations.DesignerProperty;
import com.google.appinventor.components.annotations.PropertyCategory;
import com.google.appinventor.components.annotations.SimpleFunction;
import com.google.appinventor.components.annotations.SimpleObject;
import com.google.appinventor.components.annotations.SimpleProperty;
import com.google.appinventor.components.common.ComponentCategory;
import com.google.appinventor.components.common.PropertyTypeConstants;
import com.google.appinventor.components.runtime.*;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;

@DesignerComponent(version = Clipboard.VERSION,
    description = "App Inventor 2 剪贴板管理拓展。Powered by 中文网(www.fun123.cn)",
    helpUrl = "https://www.fun123.cn/reference/extensions/",       //点“帮助”跳转的页面
    category = ComponentCategory.EXTENSION,
    nonVisible = true,                                             //非可视拓展
    iconName = "aiwebres/small-icon.png")                          //拓展的图标,可以使用相对路径
@SimpleObject(external = true)
@SuppressWarnings("deprecation")
@UsesPermissions(permissionNames = "android.permission.INTERNET")  //拓展需要请求的权限,这里仅展示用
@UsesPermissions({INTERNET})                                       //简洁写法,等同于上面一行
@UsesLibraries(libraries = "okhttp-3.12.13.jar, xxx.jar")          //依赖第三方jar库的,多个英文逗号分隔

public class Clipboard extends AndroidNonvisibleComponent implements Component {

  public static final int VERSION = 1;
  private ComponentContainer container;
  private Context context;
  private static final String LOG_TAG = "CB";
  private boolean suppressToast;


  public Clipboard(ComponentContainer container) {
    super(container.$form());
    this.container = container;
    context = (Context) container.$context();
    Log.d(LOG_TAG, "Clipboard Created");
  }


  @SimpleProperty(category = PropertyCategory.BEHAVIOR,
      description = "操作成功后不显示提示信息,默认 false。")
  public boolean SuppressToast() {
    return suppressToast;
  }


  @DesignerProperty(editorType = PropertyTypeConstants.PROPERTY_TYPE_BOOLEAN,
      defaultValue = "false")
  @SimpleProperty
  public void SuppressToast(boolean suppressToast) {
    this.suppressToast = suppressToast;
  }


  @SimpleFunction(description = "拷贝文本至剪贴板,如果 SuppressToast 是 true,则拷贝完成后不会显示'文本已拷贝'的提示信息。")
  public void Copy(String text) {
    try {
      //演示用,代码省略...
      Log.d(LOG_TAG, "文本已拷贝: " + text);
    } catch (Exception e) {
      Log.e(LOG_TAG, e.getMessage(), e);
    }
  }

  @SimpleFunction(description = "从剪贴板粘贴文本,如果 SuppressToast 是 true,则粘贴完成后不会显示'文本已粘贴'的提示信息。")
  public String Paste() {
    //演示用,代码省略...
    Log.d(LOG_TAG, "文本已粘贴!");
    return "";
  }
}

如果拓展中需要请求相关权限,可以在代码中进行申明,有两种方式:

@UsesPermissions(permissionNames = "android.permission.INTERNET")  //拓展需要请求的权限,这里仅展示用
@UsesPermissions({INTERNET})                                       //简洁写法,等同于上面一行

如果拓展用到了第三方库,也可以进行申明:

@UsesLibraries(libraries = "okhttp-3.12.13.jar, xxx.jar")          //依赖第三方jar库的,多个英文逗号分隔

//拓展编译//

进入目录:appinventor-sources/appinventor,执行如下命令:

ant extensions

编译成功后,.aix拓展在 appinventor-sources/appinventor/components/build/extensions/ 目录下:

图片

//拓展导入,测试验证//

图片

基本的流程大致就是这样的了,如果要开发更为复杂的高级拓展,可以参考源码中官方提供的样例,多研究、多测试一定能够搞得定的,加油~

如果在编译或开发过程中遇到任何问题,欢迎来社区发帖讨论。

原文:为AppInventor2开发拓展(Extension) · App Inventor 2 中文网

标签:AppInventor2,appinventor,Extension,拓展,components,import,android,com
From: https://blog.csdn.net/zqp2013/article/details/142147512

相关文章

  • md5拓展攻击
    md5拓展攻击【工具】hash-ext-attack/img/img_1.pngatmaster·shellfeel/hash-ext-attack·GitHub【攻击方法例题】https://ctf.org.cn/2019/11/19/哈希长度扩展攻击以及HashPump安装使用和两道题目/实际中的利用条件如下:基于哈希的消息认证码(MAC):长度扩展攻击的......
  • 高颜值官网(1):百货类网站UI,拓展一下你的眼界。
    Hi、我是大千UI工场,本期开始每次分享8-10个各行业的大气颜值官网,欢迎关注我,以便及时收到更新消息,我是10年UI和前端领域老司机了,一定不负所望。      ......
  • 『功能项目』C#拓展 - 优化冗余脚本【36】
    我们打开上一篇35战士的平A特效的项目,本章要做的事情是代码优化,通常为了少写一些重复的脚本,会将常用到的一段代码封装在一个自定义的静态拓展方法里,在外部类中调用即可。新建一个脚本文件夹创建脚本:WExtension.csusingUnityEngine;publicstaticclassWExtension{......
  • Git Extensions:一个.NET开源的 Git 图形用户界面(GUI)工具
    前言今天大姚给大家分享一个.NET开源、免费的用于管理Git存储库的独立图形用户界面(GUI)工具,它还与Windows资源管理器和 MicrosoftVisualStudio(2015/2017/2019/2022)集成:GitExtensions。Git新手指南:从基础到实践的全方位教程功能介绍图形用户界面:提供一个友好的......
  • 基于“SRP模型+”多技术融合在生态环境脆弱性评价模型构建、时空格局演变分析与RSEI
      近年来,国内外学者在生态系统的敏感性、适应能力和潜在影响等方面开展了大量的生态脆弱性研究,他们普遍将生态脆弱性概念与农牧交错带、喀斯特地区、黄土高原区、流域、城市等相结合,评价不同类型研究区的生态脆弱特征,其研究内容主要包括脆弱性的时空演变、动态监测、影响机......
  • Git Extensions:一个.NET开源的 Git 图形用户界面(GUI)工具
    前言今天大姚给大家分享一个.NET开源、免费的用于管理Git存储库的独立图形用户界面(GUI)工具,它还与Windows资源管理器和MicrosoftVisualStudio(2015/2017/2019/2022)集成:GitExtensions。Git新手指南:从基础到实践的全方位教程功能介绍图形用户界面:提供一个友好的......
  • 快手直播销售新篇章:拓展产品线的策略与实践快手
    在直播销售的浪潮中,商家们为了满足消费者日益多样化的需求,不断寻求产品线的拓展。如何在货品上做出改变,既满足老客户的复购需求,又能吸引新客户的首购兴趣,成为了摆在商家面前的一大挑战。本文将深入探讨如何在直播销售中拓展产品线,助力商家提升消费者满意度和购买力。一、老......
  • WPF 现代化开发教程:使用 Microsoft.Extensions.Hosting 和 CommunityToolkit.Mvvm
    介绍随着WPF应用程序的复杂性增加,使用现代化的开发工具和模式变得尤为重要。本教程将指导你如何使用Microsoft.Extensions.Hosting和CommunityToolkit.Mvvm来开发一个现代化的WPF应用程序。这些工具为开发者提供了依赖注入、应用程序生命周期管理、MVVM模式支持等功能。先决......
  • 优化拓展Camstar原生弹窗提示,解决原生消息提示无效或被覆盖的场景
    1.参考代码如下 1usingCamstar.WebPortal.PortalFramework;2usingSystem;3usingSystem.Web.UI;45namespaceCamstar.WebPortal.WebPortlets.Shopfloor6{7///<summary>8///優化拓展Camstar原生消息彈窗提示,解決原生消息提示無效或被覆蓋......
  • [oeasy]python031_[趣味拓展]unix起源_Ken_Tompson_Ritchie_multics
    [趣味拓展]unix起源_Ken_Tompson_Ritchie_multics......