在Android Studio中開發(fā)安卓項(xiàng)目中,gradle的作用日益重要。本文主要針對(duì)在Android Studio中開發(fā)插件,并結(jié)合Gradle,實(shí)現(xiàn)gralde+plugin的組合给郊,滿足日益復(fù)雜的開發(fā)和構(gòu)建功能。該文主要提供了各類參考資料捧灰,剩下的就是學(xué)習(xí)和實(shí)踐了淆九。
IntelliJ Plugin開發(fā)
官方文檔
支持Gradle的第三方庫
將Gradle嵌入到工程中,并提供API讓用戶實(shí)現(xiàn)gradle的功能毛俏,包括執(zhí)行并監(jiān)控gradle的構(gòu)建炭庙,查詢構(gòu)建的詳細(xì)信息等。
examples:
//創(chuàng)建連接
BuildLauncher build = connection.newBuild();
//任務(wù)名
build.forTasks(taskName);
//設(shè)置任務(wù)執(zhí)行參數(shù)
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[]{}));
//設(shè)置任務(wù)輸出流
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
build.setStandardOutput(outputStream);
build.setStandardError(System.err);
//添加監(jiān)聽事件
build.addProgressListener((ProgressListener) progressEvent -> {
String outResult = outputStream.toString();
if (outResult != null && outResult.length() > 0) {
NotificationUtils.info(outResult, project);
outputStream.reset();
}
});
//執(zhí)行任務(wù)拧抖,添加回調(diào)
build.run(resultHandler);
Log的輸出
- 在eventLog中輸出的Log:
普通日志
new NotificationGroup("Gradle sync", NotificationDisplayType.NONE, true).createNotification(infoMsg, MessageType.INFO).notify(project);
錯(cuò)誤日志(同事會(huì)在右下角彈氣泡,balloon)
new NotificationGroup("com.maihaoche.mazda", NotificationDisplayType.BALLOON, true).createNotification(infoMsg, MessageType.INFO).notify(project);
-
彈窗提示用戶錯(cuò)誤
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);
數(shù)據(jù)的本地存儲(chǔ)
-
存儲(chǔ)數(shù)據(jù)
Application級(jí)別: PropertiesComponent.getInstance().setValues(key, setValue) Project級(jí)別: PropertiesComponent.getInstance(Project).setValues(key, setValue)
-
讀取數(shù)據(jù)
Application級(jí)別: PropertiesComponent.getInstance().getValue(key, defaultValue) Project級(jí)別: PropertiesComponent.getInstance(Project).getValue(key, defaultValue)
Swing 的UI
構(gòu)建和發(fā)布
pulgin.xml 配置
<description>標(biāo)簽(介紹插件的說明文字)和 <change-notes> 標(biāo)簽(版本更新日志)煤搜。這兩個(gè)標(biāo)簽需要添加英文描述免绿,否則無法通過IntelliJ官方的插件審批唧席。
-
<idea-version>標(biāo)簽決定了插件支持的IntelliJ版本。例如
<idea-version> since-build="162.2228.14"/>
這里的since-build后面對(duì)應(yīng)的版本號(hào)不能超過運(yùn)行該插件的android studio對(duì)應(yīng)的IntelliJ 的版本號(hào).否則在AndroidStudio中安裝該插件的時(shí)候嘲驾,會(huì)報(bào)不兼容錯(cuò)誤淌哟,既安裝不了。
插件的發(fā)布
代碼編寫完畢辽故,并且debug后徒仓,點(diǎn)擊Build->Prepare Plugin Module 'xxx' For Deployment.會(huì)在根目錄下生成 xxx.jar文件(如果包含了第三方庫,會(huì)生成xxx.zip文件)誊垢。該文件可以直接在android studio中作為插件安裝掉弛。
插件的發(fā)布。到IntelliJ IDEA Plugins倉儲(chǔ)官網(wǎng)注冊(cè)賬號(hào)喂走,并創(chuàng)建新的項(xiàng)目殃饿,講開發(fā)生成的jar或者zip文件上傳。等待官方的審批芋肠。一般是在10個(gè)工作日左右乎芳。審批通過了之后才能在AndroidStudio中的"Browse repositories..."搜索并安裝。
gradle腳本
Groovy語言
XML
xinclude是xml中的一個(gè)語法標(biāo)記。它的提供了在xml包含其他內(nèi)容的功能奈惑。其他包含的內(nèi)容可以為 文字片段吭净,網(wǎng)絡(luò)鏈接, xml內(nèi)部的節(jié)點(diǎn)等等肴甸。
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>
幾個(gè)常用的語法:
對(duì)資源進(jìn)行定位的兩個(gè)屬性: