gralde -04-自定義插件流程

我不太會 groovy 所以使用java? 來制作 插件

1;插件一個(gè)java library

2:在java library 中的? 添加 gradle? 依賴 和 安卓插件的依賴

dependencies{

? implementation gradleApi();

? implementation'com.android.tools.build:gradle:4.0.1'

}

4:創(chuàng)建一個(gè)實(shí)體類 來定義我們在插件 需要? 數(shù)據(jù)

====================================

public class xxxEntity {

? public Stringname;

? public? Stringpwd;

}

=========================


5:創(chuàng)建一個(gè)task (最自己的業(yè)務(wù))

========================

public class xxxTask? extends DefaultTask{

xxxEntity? ?entity;

@Inject(構(gòu)造函數(shù) 一定要加)

? ?public PGYUploadTask(xxxEntity? info) {

? ? ? this.entity= info;

? ? setGroup("taskGroupName");? ?// 設(shè)置task 的 組名

}

? ? @TaskAction

? ? public void dowrk() {

? ? ? ?// 做自己的業(yè)務(wù)

? ?例如: 上傳apk? ? 正常寫java的 網(wǎng)絡(luò)請求就行

? ? }


}

========================


5:插件一個(gè) java 類 實(shí)現(xiàn)?implements Plugin<Project>? 并實(shí)現(xiàn)?apply 方法

========================================

public class DingDingPluginimplements Plugin {

@Override

? ? public void apply(Project project) {

//?"taskName",? ?1: 是在 需要使用 插件的 build.gradle 中需要使用的 配置的名稱

//?xxxEntity? ??

? xxxEntity? ?xxEntity= project.getExtensions().create("xxxConfig",? ? xxxEntity? ?.class);

? ?project.afterEvaluate(new Action() {? ? // 在項(xiàng)目配置完 后執(zhí)行一個(gè)動作

@Override

? ? ? ? ? ? public void execute(final Project project) {

? ?//Project? ?可以獲取項(xiàng)目的信息?

? ? ? ? ? ? ?創(chuàng)建task 并執(zhí)行

//?xxxTask" “”? ?task 的名稱? ??xxxTask?.class: 要執(zhí)行的 task? ??xxEntity:? xxxTask 構(gòu)造函數(shù)的參數(shù)??

...? 可以傳遞多個(gè)參數(shù)

? ? ? ? ? ? ? ? xxxTask? ?sendTxt = project.getTasks().create("xxxTask", xxxTask?.class,xxEntity蒸矛,....);

//? 如果是需要多個(gè) task 執(zhí)行不同的任務(wù)? 創(chuàng)建taks的 歷程和上面一樣?

// 如果 多個(gè)?task 有關(guān)聯(lián)? 比如? A task? 之執(zhí)行完 在執(zhí)行 B? ?可以使用?task 的?dependsOn();

? ? ? bTask.dependsOn(A task);? // dependsOn表示在自己之前先執(zhí)行這個(gè)方法

======================? 如你想在 app build 完 在執(zhí)行task

AppExtension appExtension = project.getExtensions().getByType(AppExtension.class);

//? ? ? ? 得到一個(gè)集合? 默認(rèn)獲取? debug? 和release

? ? ? ? ? ? ? ? appExtension.getApplicationVariants().all(new Action<ApplicationVariant>() {

? ? ? ? ? ? ? ? ? ? @Override

? ? ? ? ? ? ? ? ? ? public void execute(ApplicationVariant applicationVariant) {

//? 獲取apk build? 完 之后的信息

? ? ? ? ? ? ? ? ? ? ? ? applicationVariant.getOutputs().all(new Action<BaseVariantOutput>() { /

? ? ? ? ? ? ? ? ? ? ? ? ? ? @Override

? ? ? ? ? ? ? ? ? ? ? ? ? ? public void execute(BaseVariantOutput baseVariantOutput) {

//? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 需要加固的? 文件

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? File outputFile = baseVariantOutput.getOutputFile();

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? String name = baseVariantOutput.getName();

.//? 執(zhí)行 task?

?xxxTask? ?sendTxt = project.getTasks().create("xxxTask",?xxxTask?.class,xxEntity,..outputFile?.);

? ? ? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ? ? });

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? });

======================

}

========================================

6:配置 插件


在xx.properties 文件中配置 插件類的 全類型名

implementation-class=com.xxx.xxx.xxPlugin

7 上傳插件

在? library 中的? 添加 build.gradle 編寫

111111=========上傳本的倉庫

applyplugin:'maven-publish'

publishing{

//? ? Publication

? ? publications{

? ? ? ? xxPlugin(MavenPublication){

? ? ? ? ? ? fromcomponents.java

? ? ? ? ? ? groupId"com.xxx"? ?//? 組織名

? ? ? ? ? ? artifactId"xxx"? ? //?項(xiàng)目的唯一的標(biāo)識符驯击, 一般是項(xiàng)目名

? ? ? ? ? ? version"1.0.0"??

? ? ? ? }

? ? }

}

此時(shí)同步 一下 gradel? ?


======================= ?需要 指定倉庫 地址可以添加?

repositories{

? ? maven{

? ? ? ? //指定要上傳的maven私服倉庫1

? ? ? ? url="../repo"

? ? ? ? /*? url = "http://jenkins.maxrocky.com:8080/maven/content/repositories/thirdparty/"

? ? ? ? ? //認(rèn)證用戶和密碼credentials {

username 'admin'

password 'maxrocky5721'

}*/

? ? }

}

然后 同步? 上傳


=============================

8: 使用 插件

8.1? 在項(xiàng)目的 build.gradle 中? ? 1:添加 倉庫地址? ?2:添加插件依賴


8.2: 在 app的build.gralde 中使用


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末召耘,一起剝皮案震驚了整個(gè)濱河市梧喷,隨后出現(xiàn)的幾起案子碍讯,更是在濱河造成了極大的恐慌啤它,老刑警劉巖笑撞,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異泪酱,居然都是意外死亡派殷,警方通過查閱死者的電腦和手機(jī)还最,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來毡惜,“玉大人拓轻,你說我怎么就攤上這事【铮” “怎么了扶叉?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長橱乱。 經(jīng)常有香客問我辜梳,道長粱甫,這世上最難降的妖魔是什么泳叠? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮茶宵,結(jié)果婚禮上危纫,老公的妹妹穿的比我還像新娘。我一直安慰自己乌庶,他們只是感情好种蝶,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著瞒大,像睡著了一般螃征。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上透敌,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天盯滚,我揣著相機(jī)與錄音,去河邊找鬼酗电。 笑死魄藕,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的撵术。 我是一名探鬼主播背率,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼嫩与!你這毒婦竟也來了寝姿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤划滋,失蹤者是張志新(化名)和其女友劉穎饵筑,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體古毛,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡翻翩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年都许,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嫂冻。...
    茶點(diǎn)故事閱讀 39,902評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡胶征,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出桨仿,到底是詐尸還是另有隱情睛低,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布服傍,位于F島的核電站钱雷,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏吹零。R本人自食惡果不足惜罩抗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望灿椅。 院中可真熱鬧套蒂,春花似錦、人聲如沸茫蛹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽婴洼。三九已至骨坑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間柬采,已是汗流浹背欢唾。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留警没,地道東北人匈辱。 一個(gè)月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像杀迹,于是被迫代替她去往敵國和親亡脸。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評論 2 354