App Inventor外掛開發(七)小結未完待續
刪除大段無用的廢話,我昨天是在幹什麼。
文中所有的目錄相關都是以appinventor-sources\appinventor為根。
0.前言
話說我剛剛說這廣州服不更新怎麼轉眼就更新了。
但是更新後發現setContentView方法失效,造成整個外掛無法使用,正在思考解決方案。
不知該問題是我個人原因還是大家都有。
只要新增進去一個佈局,然後直接對該佈局進行新增控制元件即可,即繞過該方法,其他依舊可用。
1.開發環境(大牛請略過)
開發環境的配置之前已經講過了,但是我實際使用時還是做了一些修改。
1.1開發工具
notepad++的程式碼提示太廢了
改用Sublimt Text 3,不但顏值高而且功能強大,相見恨晚。
1.2build.xml修改
我覺得編譯速度有點慢,對其進行少量修改,大家可自行嘗試,不是很推薦。
1.2.1編譯順序
把depends都改成只依賴於前一個target,可以減少重複編譯的時間。
從72秒變成了34.2秒。
1.2.2去除冗餘(不建議)
因為我參加的比賽要求必須能在廣州服上執行,所以我不能更改標準庫。
因此,對原來庫的編譯不再必要。設定一堆只讀,跳過大量target。
結果從30+秒變成了14.2秒。
雖然很快,但是不建議,不是很穩定。有這修改的時間,足夠做很多事情了。
1.3第三方依賴新增
比如百度地圖,和風天氣等很多庫都是通過jar釋出的,不是web介面。
相信如果你有這種需求,應該很容易看懂我在幹什麼。
下面以
- 下載jar,重新命名為heweather-2.0.jar。
- 新建目錄lib\heweather,將heweather-2.0.jar貼上進入。
- 然後再在components/build.xml中,大概133-164和265-294行中間會有一大坨匯入,新增如下
<!-- HeWeather-lib -->
<pathelement location="${lib.dir}/heweather/heweather-2.0.jar" />
隨後即可根據官方文件進行開發。
1.4工作目錄轉移
因為經常要匯入原生元件,我直接把Android SDK下sources/android-22整個拷過來了,但是編譯時會把這些也全進行編譯。
雖然這個問題可以通過在build.xml中新增exclude來解決。可直接在另一目錄工作是個更好的辦法,通過批處理將測試包都複製過去,最後進行編譯。
如果你bat寫的好不會浪費時間,甚至可以節省時間。就是xcopy命令複製目錄時要手動輸入個d,試了試前面加上echo d|
1.5cmd.bat
這個大家應該都知道,win下沒有像Linux一樣ctrl+alt+t直接在當前目錄開啟終端的方式,慢慢cd過去簡直要死人,尤其是遇到中文目錄時。
新建cmd.bat,內容7位元組cmd.exe
,放在需要開啟的目錄下,雙擊執行。
我順便統計了一下,在我的D盤下一共有525個7位元組的cmd.bat。。。
1.6Apktool&dev2jar&jd-gui
這三個工具的安裝不用多說,都是逆向時用到的東西。
但是逆向出來的結果讓我人都傻了,中文變數名都是小事,看著滿篇的SimpleSymbol、ModuleMethod、LList連句正常的程式碼都沒有。
給大家放一段看看。。。就是我的WifiTemp的逆向。
1.7常用網站
2.註解的使用
類、方法、屬性、回撥都是通過添加註解使得其被註解直譯器識別的。
注意預設是不定義該屬性時該屬性的預設值,而不是平常所設定的值。
2.1類
兩個註解一般一起用。
可能需要將訪問控制設定為public,未測試。
@DesignerComponent(version = A.VERSION,
description = "",
category = ComponentCategory.EXTENSION,
nonVisible = true,
iconName = "images/extension.png")
@SimpleObject(external = true)
public class A extends AndroidNonvisibleComponent{
public static final int VERSION = 1;
//...
}
常用屬性
DesignerComponent
屬性值 | 介紹 | 常用 |
---|---|---|
category | 元件類別 | ComponentCategory.EXTENSION |
description | javadoc中的介紹 | — |
designerHelpDescription | 給使用者看的介紹 | — |
nonVisible | 是否為不可見元件 | true |
iconName | 圖示 | “images/extension.png” |
version | 版本 | 1 |
helpUrl | 幫助網頁網址 | — |
注意
- 圖示的目錄在appengine\src\com\google\appinventor\images下
- designerHelpDescription為空則用description代替
屬性值 | 介紹 | 常用 |
---|---|---|
external | 是否為外部元件 | true |
2.2方法
方法的建立更為簡單,但又有一定限制。
暴露給使用者的方法的引數及返回值只能是Yail Type。
Yail Type我也不知道是何方神聖,但是隻能用簡單型別和少數例外以及Object。
可以強制型別轉換解決。
@SimpleFunction(description = "")
public void setXXX(Object buttonObject) {
Button button = (Button)buttonObject;
//...
}
屬性值 | 介紹 | 常用 |
---|---|---|
description | 描述 | — |
userVisible | 使用者是否可見 | true |
2.3屬性
屬性本質上還是個方法,只不過使用了不同的註解。
private float xxx = 12.3;
@DesignerProperty(editorType = PropertyTypeConstants.PROPERTY_TYPE_FLOAT,
defaultValue = 0.5f + "")
@SimpleProperty(category = PropertyCategory.APPEARANCE)
public void XXX(float x) {
xxx = x;
}
3.程式碼開光術
//
// _ooOoo_
// o8888888o
// 88" . "88
// (| -_- |)
// O\ = /O
// ____/`---'\____
// . ' \\| |// ` .
// / \\||| 1 |||// \
// / _||||| -9- |||||- \
// | | \\\ 9 /// | |
// | \_| ''\-8-/'' | |
// \ .-\__ `0` ___/-. /
// ___`. .' /--2--\ `. . __
// ."" '< `.___\_<0>_/___.' >'"".
// | | : `- \`.;`\ 2 /`;.`/ - ` : | |
// \ \ `-. \_ __\ /__ _/ .-` / /
// ======`-.____`-.___\_____/___.-`____.-'======
// `=---='
//
// .............................................
// 佛祖保佑 永無BUG
// 佛曰:
// 寫字樓裡寫字間,寫字間里程序員;
// 程式人員寫程式,又拿程式換酒錢。
// 酒醒只在網上坐,酒醉還來網下眠;
// 酒醉酒醒日復日,網上網下年復年。
// 但願老死電腦間,不願鞠躬老闆前;
// 賓士寶馬貴者趣,公交自行程式設計師。
// 別人笑我忒瘋癲,我笑自己命太賤;
// 不見滿街漂亮妹,哪個歸得程式設計師?
//
未完待續。。。