比赛作品已经提交,剩下就听天由命吧。抽空重写一下博客,感觉自己之前废话好多,还写了不少自以为幽默的句子。
增加了补充,见最后。App Inventor会简称AI。
将会开源一大批测试文件,见最后。
<>0.前言
感谢ColinTree <https://blog.csdn.net/aiw_prton/article/details/www.colintree.cn>
同学的博客,很好的教会了我怎么写插件。
根据ColinTree同学的教程 <http://appextension.applinzi.com/article/HowToWriteAIX-0>踩坑。
学习基础:Java基本语法。
我只是略懂Java,措辞如有不当还请赐教
<>1.配置工具
需要下载三个必须的工具Git <https://git-scm.com/downloads>、Ant
<https://ant.apache.org/bindownload.cgi>、JDK8&JRE8
<http://www.oracle.com/technetwork/cn/java/javase/downloads/index.html>。
以及一个代码编辑器,如Notepad++ <https://notepad-plus-plus.org/download>和Sublime Text 3
<https://www.sublimetext.com/3>,或ColinTree同学推荐的Jedit
<http://www.jedit.org/index.php?page=download>。当然如果你喜欢记事本也是个不错的选择。
个人推荐Sublime Text 3,颜值高功能强大,相见恨晚。
安装自然不必多讲,相信大家都会,注意JDK不得高于8,即52。
安装后需配置环境变量。
Java环境变量配置
* 新建JAVA_HOME为安装目录(如C:\Program Files (x86)\Java\jdk1.8.0_91)
* Path末尾添加%JAVA_HOME%/bin;%JAVA_HOME%/jre/bin;,win10分行添加
* 新建CLASSPATH为.;%JAVA_HOME%/lib/dt.jar;%JAVA_HOME%/lib/tools.jar
* 检验:cmd输入java -version,输出版本信息即为成功
Ant环境变量配置
* 添加环境变量ANT_HOME为安装(解压)位置
* Path中添加%ANT_HOME%\bin。
* CLASSPATH末尾添加%JAVA_HOME%/bin;%JAVA_HOME%/jre/bin;
* 检验:cmd输入ant,输出如下则为配置成功 Buildfile: build.xml does not exist! Build failed
<>2.下载源码
cmd进入工作目录,执行git clone https://github.com/mit-cml/appinventor-sources.git
,等待下载即可。
如果下载速度不行,可能需要一下备用措施。
<>2.1zip下载
可以到该项目 <https://github.com/mit-cml/appinventor-sources>直接下载zip压缩包,解压到你的工作目录。
<>2.2国内镜像
国内的代码托管网站码云 <https://gitee.com/>应该比GitHub快。总共有三个方案:
* 我于2018.8.5(更2018.10.27)克隆的项目
<https://gitee.com/aiw_prton/appinventor-sources>,可以替换掉GitHub的源。
https://gitee.com/aiw_prton/appinventor-sources.git
* 在该站内搜索appinventor-sources的项目,下载别人的克隆。
* 如果你不信任我和他人,或是很久没有更新,可以自行克隆。
* 新建项目,下方导入已有项目中填入GitHub的源https://github.com/mit-cml/appinventor-sources.git
* 创建完成后,耐心等待一小时左右,获取源即可。
* 下载一共将近700M,预计5分钟左右。
<>3.测试
ColinTree同学的测试文件
<https://aix.colintree.cn/Article/HowToWriteAIX/%E6%8B%93%E5%B1%95%E7%BB%84%E4%BB%B6%E5%90%8D%E5%AD%97.java>
可能出现了问题,无法访问,所以我尝试了很久凑出了一个文件。
在..\appinventor-sources\appinventor\components\src\下创建Java源文件MyExtension.java
,包名cn.temp,注意包名与文件夹的对应关系。
package cn.temp; import com.google.appinventor.components.annotations.*; import
com.google.appinventor.components.common.ComponentCategory; import com.google.
appinventor.components.runtime.*; import com.google.appinventor.components.
runtime.util.*; import com.google.appinventor.components.runtime.errors.
YailRuntimeError; @DesignerComponent(version = MyExtension.VERSION, description
= "by Roger Young", category = ComponentCategory.EXTENSION, nonVisible = true,
iconName= "images/extension.png") @SimpleObject(external = true) public class
MyExtension extends AndroidNonvisibleComponent { public static final int VERSION
= 1; private static final String LOG_TAG = "MyExtension"; public MyExtension(
ComponentContainer container) { super(container.$form()); } //计算a+b的和然后转换成字符串
@SimpleFunction(description = "add up a and b") public String addab(int a,int b)
{ return ""+(a+b); } }
代码意图不用多说,但为什么这么写以后讲。
在..\appinventor-sources\appinventor\目录下打开cmd,执行ant extensions,显示BUILD
SUCCESSFUL即为编译成功。
编译完成后,在网页端Extension处点击,导入,再拖入面板。详细步骤请看ColinTree同学的教程
<http://appextension.applinzi.com/article/HowToImportAIX-0>。
然后设置界面
贴上代码
运行一下
如图即为测试成功!
<>4.补充
<>4.1补充
第二篇不是没了,是我自己删了。原来第一篇是配置,第二排是测试,我合并在一起,顺便改了几个有严重错误的地方。
在配置文件中不用改那个版本号,只需要下载低版本的jdk就行了。我也不知道当时是怎么改了以后编译就过了。。。
<>4.2维护
我的那几个小插件应该只会更最后一版。
setContentView方法不知为何无效了,只能放一个ViewGroup的封装类再调用getView,再addView。比赛前因为这个问题吓出了我一身冷汗。
之后不在维护。
<>4.3我的思考
我反复思索了插件的意义。
插件是为了解放功能,而不是方便开发。
所以我之后的工程架构(姑且这么称吧)是放一个ViewGroup的封装类再调用getView,得到那个ViewGroup。随后通过插件全面接管
,不再动用AI原生的方法,直接代码调试。
除了json解析。。。那个我用那个什么YailList简直想杀人,连列表有几个元素都搞不清楚。
<>4.4未来计划
那几个插件修复到能用后不再维护,高二要学考了,很忙。
我还会写最后一个插件,通过反射调用指定类,指定方法。
像我这样今天写个动画插件,明天写个RelativeLayout插件,后天再来个别的,不如一次性把所有的全解放
虽说这样用不到反射,
热门工具 换一换