AppInventor擴展組件編譯器AIXC極速入門

首先說明,本篇文章僅針對已有AppInventor擴展組件開發(fā)經(jīng)驗的同學(xué)而寫的,目的是使大家由原來的從AppInventor源碼開發(fā)組件的方式轉(zhuǎn)變?yōu)槭褂帽揪幾g器構(gòu)建AppInventor擴展組件的方式。

本編譯器名為AIXC,由本人開發(fā),專門用于構(gòu)建AppInventor擴展組件的一款編譯器,它相比于官方的AppInventor中組件的構(gòu)建方式擁有很多的特性,包括而不限于以下特性:

  • 1.體積小巧簡單,官方ai源碼完整下載就要4,500M,而本編譯器打包為壓縮包,體積僅30M+。
  • 2.配置簡單,從官方ai源碼編譯aix組件需要配置ant,git,jdk(包含jre)環(huán)境,本編譯器僅僅只需要jre環(huán)境(自帶ecj編譯器,無需安裝jdk)。

  • 3.編譯速度與官方ai源碼相比提升了數(shù)十倍,尤其是在不引入jar包的情況下,編譯一個aix可在數(shù)秒內(nèi)完成。

  • 4.支持根據(jù)組件的Blocky的注解中的description全自動構(gòu)建可視化Markdown組件說明文檔(目前僅支持生成gitbook下的Markdown文檔且需要安裝ai2-blocks插件)。

  • 5.完美支持擴展組件中打包jni庫(so文件),官方的編譯目前有很多坑。

  • 6.更方便地打包組件依賴的assets資源文件夾,jni庫文件夾,aiwebres網(wǎng)頁資源文件夾(一般用于存放組件圖標(biāo))。

  • 7.工程化aix項目,ai官方源碼中編譯aix,其代碼放入components/src中,本質(zhì)上和其自帶組件屬于同等級別的源代碼,而本aix編譯器,以類似Eclipse項目的文件結(jié)構(gòu)管理一個aix組件。

  • 8.通過編寫build.json編譯信息來編譯aix工程項目。

本編譯器的下載地址在作者的個人網(wǎng)站上
點擊下載

下載后是個zip壓縮文件,解壓后我們得到如圖的文件夾


aixc

打開aixc后我們得到如下圖的文件:

AIXC文件構(gòu)成

aixc.bat是編譯器的啟動器
Compiler.jar是編譯器的主體
其中runtime-library是所有擴展組件編譯時所需要的運行時環(huán)境(當(dāng)前V0版本包含了Android API 28的SDK,v4,v7的support包,最新的AppInventor內(nèi)置組件及源碼,kawa包)


runtime-library

雙擊運行aixc.bat可以看到如下圖所示的界面:


啟動界面

可以看到,本編譯器很簡單,有兩種編譯組件的方式,一種是使用默認的文件夾結(jié)構(gòu)來組成aix項目結(jié)構(gòu),另一種是使用json文檔來構(gòu)建aix項目結(jié)構(gòu)。

這里先介紹下用法1:
新建一個文件夾Test,其中建立子文件夾src用于存放組件源代碼,其中可隨意建立包名,隨意放置java代碼。
官方ai源碼有一個缺點,就是必須把組件依賴的類放置在同一個包下,在aix打包時才會被一起打包進aix擴展包中,而本編譯器則無此缺點。

下列案例中,我們在組件項目中新建一個文件夾src/cn/zzq/aix/test,其中新建一個類Test.java

代碼如下:

package cn.zzq.aix.test;
import com.google.appinventor.components.annotations.DesignerComponent;
import com.google.appinventor.components.annotations.SimpleEvent;
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.runtime.AndroidNonvisibleComponent;
import com.google.appinventor.components.runtime.ComponentContainer;
import com.google.appinventor.components.runtime.EventDispatcher;
import com.google.appinventor.components.common.ComponentCategory;
@DesignerComponent(version = 0,     //指明當(dāng)前組件的版本號
category=ComponentCategory.EXTENSION,//指明的當(dāng)前組件所在的組件分類為擴展組件(EXTENSION)分類
iconName = "images/extension.png",//擴展組件的圖標(biāo)
nonVisible = true)//表明該組件為不可視組件
@SimpleObject(external = true)
public class Test extends AndroidNonvisibleComponent {
    public Test(ComponentContainer container){
        super(container.$form());
    }
    
    @SimpleEvent(description = "乘法計算結(jié)束后事件被調(diào)用")
    public void Multipled(double result){
        EventDispatcher.dispatchEvent(this, "Multipled", result);
    }

    @SimpleFunction(description = "異步乘法")
    public void multiply(double a,double b){
        Multipled(a*b);
    }
    
    @SimpleFunction(description = "第一個組件的函數(shù)塊定義")
    public double add(double a,double b){
        return a+b;
    }

    private String a=null;
    @SimpleProperty(description = "設(shè)置屬性A的值")
    public void A(String a){
        this.a=a;
    }

    @SimpleProperty(description = "獲取屬性A的值")
    public String A(){
        return this.a;
    }

}

如圖,我們將整個項目文件夾拖入該bat文件中

開始編譯

如下圖可以發(fā)現(xiàn)組件項目開始迅速編譯起來了,我這個機器由于年代很久遠了,所以編譯時間可能比你們的要長。

image.png

image.png

再進項目文件夾,可以在其中找到一個build目錄,這個就是編譯器的輸出目錄:


build目錄

其中build.log文件為之前編譯時控制臺輸出的所有編譯信息,進output文件夾,可以找到編譯出來的aix文件和自動生成的markdown文檔,此markdown文檔是根據(jù)組件的注解中的description自動生成的,目前僅支持導(dǎo)入到gitbook中解析(需要安裝gitbook的ai2-blocks插件),它可以生成可視化的Blocky代碼塊的說明文檔,比如
JavaReflector組件文檔

除了手動將aix工程項目目錄拖入aixc.bat文件外,我們還可以通過配置環(huán)境變量的方式,在任何目錄都可以直接使用aixc命令來編譯aix。
類似于配置Java環(huán)境變量需要一個JAVA_HOME,本編譯器也需要創(chuàng)建一個環(huán)境變量,變量名為AIXC_HOME,變量值為你的aix編譯器路徑,


AIXC_HOME環(huán)境變量

然后在Path環(huán)境變量的末尾處追加如下變量值

%AIXC_HOME%;

如圖


Path環(huán)境變量

現(xiàn)在打開你的cmd,在任何地方輸入aixc,如果出現(xiàn)下圖,則說明配置成功,

AIXC

若提示

'aixc' 不是內(nèi)部或外部命令,也不是可運行的程序或批處理文件

請重新按照上述流程重新配置環(huán)境變量。

此時,我們可以在任意目錄下去構(gòu)建aix項目了。
如下圖,我桌面上有一個叫做Test的aix項目,我輸入命令

aixc Test

就可以正常編譯,如果當(dāng)前目錄已經(jīng)處在aix項目目錄中,那么僅僅只需要輸入

aixc .

即可開始編譯


image.png

以上便是一般用來構(gòu)建aix的方法

下面介紹方法2:
方法2是使用
未完待續(xù)。。。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容