删除大段无用的废话,我昨天是在干什么。
文中所有的目录相关都是以appinventor-sources\appinventor为根。
话说我刚刚说这广州服不更新怎么转眼就更新了。
但是更新后发现setContentView方法失效,造成整个插件无法使用,正在思考解决方案。
不知该问题是我个人原因还是大家都有。
只要添加进去一个布局,然后直接对该布局进行添加控件即可,即绕过该方法,其他依旧可用。
开发环境的配置之前已经讲过了,但是我实际使用时还是做了一些修改。
notepad++的代码提示太废了
改用Sublimt Text 3,不但颜值高而且功能强大,相见恨晚。
我觉得编译速度有点慢,对其进行少量修改,大家可自行尝试,不是很推荐。
把depends都改成只依赖于前一个target,可以减少重复编译的时间。
从72秒变成了34.2秒。
因为我参加的比赛要求必须能在广州服上运行,所以我不能更改标准库。
因此,对原来库的编译不再必要。设置一堆只读,跳过大量target。
结果从30+秒变成了14.2秒。
虽然很快,但是不建议,不是很稳定。有这修改的时间,足够做很多事情了。
比如百度地图,和风天气等很多库都是通过jar发布的,不是web接口。
相信如果你有这种需求,应该很容易看懂我在干什么。
下面以和风天气举例。
<pathelement location="${lib.dir}/heweather/heweather-2.0.jar" />
随后即可根据官方文档进行开发。
因为经常要导入原生组件,我直接把Android SDK下sources/android-22整个拷过来了,但是编译时会把这些也全进行编译。
虽然这个问题可以通过在build.xml中添加exclude来解决。可直接在另一目录工作是个更好的办法,通过批处理将测试包都复制过去,最后进行编译。
如果你bat写的好不会浪费时间,甚至可以节省时间。就是xcopy命令复制目录时要手动输入个d,试了试前面加上echo d|
差点把d盘给我删了,不敢乱试。
这个大家应该都知道,win下没有像Linux一样ctrl+alt+t直接在当前目录打开终端的方式,慢慢cd过去简直要死人,尤其是遇到中文目录时。
新建cmd.bat,内容7字节cmd.exe
,放在需要打开的目录下,双击运行。
我顺便统计了一下,在我的D盘下一共有525个7字节的cmd.bat。。。
这三个工具的安装不用多说,都是逆向时用到的东西。
但是逆向出来的结果让我人都傻了,中文变量名都是小事,看着满篇的SimpleSymbol、ModuleMethod、LList连句正常的代码都没有。
给大家放一段看看。。。就是我的WifiTemp的逆向。
Google怎么突然能用了???能用我也看不懂,英语不好是个硬伤。。。
Android文档:https://developer.android.google.cn/
广州服:http://app.gzjkw.net
tinyweb数据库(安全性堪忧):http://tinywebdb.gzjkw.net/
图片上传(没用过):http://appimage.gzjkw.net/upload.php
例程与教程:
https://github.com/OpenSourceAIX
https://aix.colintree.cn/zh/
http://appextension.applinzi.com/article/HowToWriteAIX-0
http://appextension.applinzi.com/
UI设计(这一个应该够了):
http://chuangzaoshi.com/
其他教程:
http://www.w3school.com.cn/
http://www.runoob.com/
莫名发现有个做词典的得奖了,只是围绕接口做了点周边???
所以这里也放一点网页接口:
https://www.juhe.cn/
http://www.idataapi.cn/product/list?type=1
http://api.okayapi.com/docs.php?type=fold
类、方法、属性、回调都是通过添加注解使得其被注解解释器识别的。
注意默认是不定义该属性时该属性的默认值,而不是平常所设置的值。
两个注解一般一起用。
可能需要将访问控制设置为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 | 帮助网页网址 | — |
注意
属性值 | 介绍 | 常用 |
---|---|---|
external | 是否为外部组件 | true |
方法的创建更为简单,但又有一定限制。
暴露给用户的方法的参数及返回值只能是Yail Type。
Yail Type我也不知道是何方神圣,但是只能用简单类型和少数例外以及Object。
可以强制类型转换解决。
@SimpleFunction(description = "")
public void setXXX(Object buttonObject) {
Button button = (Button)buttonObject;
//...
}
属性值 | 介绍 | 常用 |
---|---|---|
description | 描述 | — |
userVisible | 用户是否可见 | true |
属性本质上还是个方法,只不过使用了不同的注解。
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;
}
//
// _ooOoo_
// o8888888o
// 88" . "88
// (| -_- |)
// O\ = /O
// ____/`---'\____
// . ' \\| |// ` .
// / \\||| 1 |||// \
// / _||||| -9- |||||- \
// | | \\\ 9 /// | |
// | \_| ''\-8-/'' | |
// \ .-\__ `0` ___/-. /
// ___`. .' /--2--\ `. . __
// ."" '< `.___\_<0>_/___.' >'"".
// | | : `- \`.;`\ 2 /`;.`/ - ` : | |
// \ \ `-. \_ __\ /__ _/ .-` / /
// ======`-.____`-.___\_____/___.-`____.-'======
// `=---='
//
// .............................................
// 佛祖保佑 永无BUG
// 佛曰:
// 写字楼里写字间,写字间里程序员;
// 程序人员写程序,又拿程序换酒钱。
// 酒醒只在网上坐,酒醉还来网下眠;
// 酒醉酒醒日复日,网上网下年复年。
// 但愿老死电脑间,不愿鞠躬老板前;
// 奔驰宝马贵者趣,公交自行程序员。
// 别人笑我忒疯癫,我笑自己命太贱;
// 不见满街漂亮妹,哪个归得程序员?
//
未完待续。。。