在Android Studio中开发安卓项目中,gradle的作用日益重要。本文主要针对在Android Studio中开发插件,并结合Gradle,实现gralde+plugin的组合,满足日益复杂的开发和构建功能。该文主要提供了各类参考资料,剩下的就是学习和实践了。
IntelliJ Plugin开发
官方文档
支持Gradle的第三方库
将Gradle嵌入到工程中,并提供API让用户实现gradle的功能,包括执行并监控gradle的构建,查询构建的详细信息等。
examples:
//创建连接
BuildLauncher build = connection.newBuild();
//任务名
build.forTasks(taskName);
//设置任务执行参数
List<String> buildArgs = new ArrayList<String>();
buildArgs.add("--parallel");
buildArgs.add("--max-workers=8");
buildArgs.add("--configure-on-demand");
buildArgs.add("--offline");
if (arguments != null && arguments.size() > 0) {
for (int i = 0; i < arguments.size(); i++) {
buildArgs.add(arguments.get(i));
}
}
build.withArguments(buildArgs.toArray(new String[]{}));
//设置任务输出流
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
build.setStandardOutput(outputStream);
build.setStandardError(System.err);
//添加监听事件
build.addProgressListener((ProgressListener) progressEvent -> {
String outResult = outputStream.toString();
if (outResult != null && outResult.length() > 0) {
NotificationUtils.info(outResult, project);
outputStream.reset();
}
});
//执行任务,添加回调
build.run(resultHandler);
Log的输出
- 在eventLog中输出的Log:
普通日志
new NotificationGroup("Gradle sync", NotificationDisplayType.NONE, true).createNotification(infoMsg, MessageType.INFO).notify(project);
错误日志(同事会在右下角弹气泡,balloon)
new NotificationGroup("com.maihaoche.mazda", NotificationDisplayType.BALLOON, true).createNotification(infoMsg, MessageType.INFO).notify(project);
-
弹窗提示用户错误
StatusBar statusBar = WindowManager.getInstance() .getStatusBar(DataKeys.PROJECT.getData(event.getDataContext())); JBPopupFactory.getInstance() .createHtmlTextBalloonBuilder(errorMsg, MessageType.ERROR, null) .setFadeoutTime(7500) .createBalloon() .show(RelativePoint.getCenterOf(statusBar.getComponent()), Balloon.Position.atRight);
数据的本地存储
-
存储数据
Application级别: PropertiesComponent.getInstance().setValues(key, setValue) Project级别: PropertiesComponent.getInstance(Project).setValues(key, setValue)
-
读取数据
Application级别: PropertiesComponent.getInstance().getValue(key, defaultValue) Project级别: PropertiesComponent.getInstance(Project).getValue(key, defaultValue)
Swing 的UI
构建和发布
pulgin.xml 配置
<description>标签(介绍插件的说明文字)和 <change-notes> 标签(版本更新日志)。这两个标签需要添加英文描述,否则无法通过IntelliJ官方的插件审批。
-
<idea-version>标签决定了插件支持的IntelliJ版本。例如
<idea-version> since-build="162.2228.14"/>
这里的since-build后面对应的版本号不能超过运行该插件的android studio对应的IntelliJ 的版本号.否则在AndroidStudio中安装该插件的时候,会报不兼容错误,既安装不了。
插件的发布
代码编写完毕,并且debug后,点击Build->Prepare Plugin Module 'xxx' For Deployment.会在根目录下生成 xxx.jar文件(如果包含了第三方库,会生成xxx.zip文件)。该文件可以直接在android studio中作为插件安装。
插件的发布。到IntelliJ IDEA Plugins仓储官网注册账号,并创建新的项目,讲开发生成的jar或者zip文件上传。等待官方的审批。一般是在10个工作日左右。审批通过了之后才能在AndroidStudio中的"Browse repositories..."搜索并安装。
gradle脚本
Groovy语言
XML
xinclude是xml中的一个语法标记。它的提供了在xml包含其他内容的功能。其他包含的内容可以为 文字片段,网络链接, xml内部的节点等等。
xinclude example:
<model>
<item id="1">I want this</item>
<item id="2"/>
<group>
<xi:include xpointer="xpointer(/model/item[ id='1'])" xmlns:xi="http://www.w3.org/2003/XInclude"/>
</group>
</model>
几个常用的语法:
对资源进行定位的两个属性: