首先說(shuō)明,本篇文章僅針對(duì)已有AppInventor擴(kuò)展組件開(kāi)發(fā)經(jīng)驗(yàn)的同學(xué)而寫的,目的是使大家由原來(lái)的從AppInventor源碼開(kāi)發(fā)組件的方式轉(zhuǎn)變?yōu)槭褂帽揪幾g器構(gòu)建AppInventor擴(kuò)展組件的方式。
本編譯器名為AIXC,由本人開(kāi)發(fā)碘举,專門用于構(gòu)建AppInventor擴(kuò)展組件的一款編譯器茎匠,它相比于官方的AppInventor中組件的構(gòu)建方式擁有很多的特性格仲,包括而不限于以下特性:
- 1.體積小巧簡(jiǎn)單,官方ai源碼完整下載就要4诵冒,500M凯肋,而本編譯器打包為壓縮包,體積僅30M+汽馋。
2.配置簡(jiǎn)單侮东,從官方ai源碼編譯aix組件需要配置ant,git,jdk(包含jre)環(huán)境,本編譯器僅僅只需要jre環(huán)境(自帶ecj編譯器惭蟋,無(wú)需安裝jdk)苗桂。
3.編譯速度與官方ai源碼相比提升了數(shù)十倍,尤其是在不引入jar包的情況下告组,編譯一個(gè)aix可在數(shù)秒內(nèi)完成煤伟。
4.支持根據(jù)組件的Blocky的注解中的description全自動(dòng)構(gòu)建可視化Markdown組件說(shuō)明文檔(目前僅支持生成gitbook下的Markdown文檔且需要安裝ai2-blocks插件)。
5.完美支持?jǐn)U展組件中打包jni庫(kù)(so文件)木缝,官方的編譯目前有很多坑便锨。
6.更方便地打包組件依賴的assets資源文件夾,jni庫(kù)文件夾我碟,aiwebres網(wǎng)頁(yè)資源文件夾(一般用于存放組件圖標(biāo))放案。
7.工程化aix項(xiàng)目,ai官方源碼中編譯aix矫俺,其代碼放入components/src中吱殉,本質(zhì)上和其自帶組件屬于同等級(jí)別的源代碼,而本aix編譯器厘托,以類似Eclipse項(xiàng)目的文件結(jié)構(gòu)管理一個(gè)aix組件友雳。
8.通過(guò)編寫build.json編譯信息來(lái)編譯aix工程項(xiàng)目。
本編譯器的下載地址在作者的個(gè)人網(wǎng)站上
點(diǎn)擊下載
下載后是個(gè)zip壓縮文件铅匹,解壓后我們得到如圖的文件夾
打開(kāi)aixc后我們得到如下圖的文件:
aixc.bat是編譯器的啟動(dòng)器
Compiler.jar是編譯器的主體
其中runtime-library是所有擴(kuò)展組件編譯時(shí)所需要的運(yùn)行時(shí)環(huán)境(當(dāng)前V0版本包含了Android API 28的SDK押赊,v4,v7的support包,最新的AppInventor內(nèi)置組件及源碼包斑,kawa包)
雙擊運(yùn)行aixc.bat可以看到如下圖所示的界面:
可以看到流礁,本編譯器很簡(jiǎn)單,有兩種編譯組件的方式罗丰,一種是使用默認(rèn)的文件夾結(jié)構(gòu)來(lái)組成aix項(xiàng)目結(jié)構(gòu)神帅,另一種是使用json文檔來(lái)構(gòu)建aix項(xiàng)目結(jié)構(gòu)。
這里先介紹下用法1:
新建一個(gè)文件夾Test丸卷,其中建立子文件夾src用于存放組件源代碼枕稀,其中可隨意建立包名,隨意放置java代碼谜嫉。
官方ai源碼有一個(gè)缺點(diǎn)萎坷,就是必須把組件依賴的類放置在同一個(gè)包下,在aix打包時(shí)才會(huì)被一起打包進(jìn)aix擴(kuò)展包中沐兰,而本編譯器則無(wú)此缺點(diǎn)哆档。
下列案例中,我們?cè)诮M件項(xiàng)目中新建一個(gè)文件夾src/cn/zzq/aix/test住闯,其中新建一個(gè)類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)前組件的版本號(hào)
category=ComponentCategory.EXTENSION,//指明的當(dāng)前組件所在的組件分類為擴(kuò)展組件(EXTENSION)分類
iconName = "images/extension.png",//擴(kuò)展組件的圖標(biāo)
nonVisible = true)//表明該組件為不可視組件
@SimpleObject(external = true)
public class Test extends AndroidNonvisibleComponent {
public Test(ComponentContainer container){
super(container.$form());
}
@SimpleEvent(description = "乘法計(jì)算結(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 = "第一個(gè)組件的函數(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;
}
}
如圖瓜浸,我們將整個(gè)項(xiàng)目文件夾拖入該bat文件中
如下圖可以發(fā)現(xiàn)組件項(xiàng)目開(kāi)始迅速編譯起來(lái)了,我這個(gè)機(jī)器由于年代很久遠(yuǎn)了比原,所以編譯時(shí)間可能比你們的要長(zhǎng)插佛。
再進(jìn)項(xiàng)目文件夾,可以在其中找到一個(gè)build目錄量窘,這個(gè)就是編譯器的輸出目錄:
其中build.log文件為之前編譯時(shí)控制臺(tái)輸出的所有編譯信息雇寇,進(jìn)output文件夾,可以找到編譯出來(lái)的aix文件和自動(dòng)生成的markdown文檔蚌铜,此markdown文檔是根據(jù)組件的注解中的description自動(dòng)生成的锨侯,目前僅支持導(dǎo)入到gitbook中解析(需要安裝gitbook的ai2-blocks插件),它可以生成可視化的Blocky代碼塊的說(shuō)明文檔冬殃,比如
JavaReflector組件文檔
除了手動(dòng)將aix工程項(xiàng)目目錄拖入aixc.bat文件外囚痴,我們還可以通過(guò)配置環(huán)境變量的方式,在任何目錄都可以直接使用aixc命令來(lái)編譯aix审葬。
類似于配置Java環(huán)境變量需要一個(gè)JAVA_HOME深滚,本編譯器也需要?jiǎng)?chuàng)建一個(gè)環(huán)境變量,變量名為AIXC_HOME涣觉,變量值為你的aix編譯器路徑痴荐,
然后在Path環(huán)境變量的末尾處追加如下變量值
%AIXC_HOME%;
如圖
現(xiàn)在打開(kāi)你的cmd,在任何地方輸入aixc旨枯,如果出現(xiàn)下圖蹬昌,則說(shuō)明配置成功,
若提示
'aixc' 不是內(nèi)部或外部命令攀隔,也不是可運(yùn)行的程序或批處理文件
請(qǐng)重新按照上述流程重新配置環(huán)境變量皂贩。
此時(shí),我們可以在任意目錄下去構(gòu)建aix項(xiàng)目了昆汹。
如下圖明刷,我桌面上有一個(gè)叫做Test的aix項(xiàng)目,我輸入命令
aixc Test
就可以正常編譯满粗,如果當(dāng)前目錄已經(jīng)處在aix項(xiàng)目目錄中辈末,那么僅僅只需要輸入
aixc .
即可開(kāi)始編譯
以上便是一般用來(lái)構(gòu)建aix的方法
下面介紹方法2:
方法2是使用
未完待續(xù)。。挤聘。