引言
不知道大家用過(guò)Spring Initializr沒(méi)有,這個(gè)是鼎鼎大名的Spring boot 在線(xiàn)生成工具鼓黔,一個(gè)完美的生態(tài)央勒,給開(kāi)發(fā)者提供太多的便利,默默付出著澳化,可為什么沒(méi)有一個(gè)Android項(xiàng)目的在線(xiàn)生成工具呢崔步?大家都不需要嗎,我并不這么想缎谷,大家都知道Jetpack提供了一套Android應(yīng)用開(kāi)發(fā)的各種組件井濒,甚是方便,而且官方還專(zhuān)門(mén)開(kāi)源了這個(gè)architecture-components-samples列林,里面有大量的模版的項(xiàng)目瑞你,不光是官方,有很多的作者也都針對(duì)MVVM做了開(kāi)源希痴,我本人也做過(guò)MVP的開(kāi)源項(xiàng)目者甲,都是基于實(shí)際開(kāi)發(fā)經(jīng)驗(yàn)搭建起來(lái)的。
知名的MVVM:
- MVVM-Architecture
- Jetpack-MVVM-Best-Practice
-
MVVMHabit
等等吧砌创,但是對(duì)于這些項(xiàng)目虏缸,你有沒(méi)有一種困惑,如果我們用他們總結(jié)好的經(jīng)驗(yàn)去開(kāi)發(fā)新的項(xiàng)目嫩实,是不是面臨修改包名刽辙,添加一些自己喜歡的框架依賴(lài)等等需求,但這怎么做的到呢甲献?這就是我接下來(lái)要做的事情宰缤,做一個(gè)在線(xiàn)Android項(xiàng)目生成工具
Jetpack在線(xiàn)生成工具
為什么叫Jetpack生成工具呢,為什么竟纳?你自己體會(huì)撵溃,哈哈,這不是重點(diǎn)锥累,重點(diǎn)是我們要做出什么樣子缘挑,請(qǐng)看設(shè)計(jì)圖,確切說(shuō)是實(shí)現(xiàn)圖桶略,因?yàn)橐呀?jīng)部署了语淘,請(qǐng)點(diǎn)擊標(biāo)題查看
三張圖诲宇,看清楚了嗎?其實(shí)這個(gè)在線(xiàn)工具主要有如下功能
- 自定義包名
- 自定義項(xiàng)目名
- 選擇開(kāi)發(fā)語(yǔ)言
- 選擇要集成的框架惶翻,集成框架分為默認(rèn)依賴(lài)姑蓝,就是在build.gradle中添加基礎(chǔ)依賴(lài),添加用例的話(huà)就是添加基礎(chǔ)的封住+demo示例吕粗。
- MVVM架構(gòu)模版選擇纺荧,后期集成更多的MVVM模版進(jìn)來(lái)提供給大家自定義項(xiàng)目
現(xiàn)在看來(lái)是不是有點(diǎn)意思了,但這些功能如何實(shí)現(xiàn)呢颅筋?下面我講講我的實(shí)現(xiàn)思路
實(shí)現(xiàn)
基本的構(gòu)成 = 網(wǎng)站 + 服務(wù)
網(wǎng)站我選擇用flutter實(shí)現(xiàn)宙暇,因?yàn)閒lutter的便利已經(jīng)讓我愛(ài)不釋手,一套代碼運(yùn)行android议泵、ios占贫、web,很不錯(cuò)
服務(wù)我選擇nodejs先口,因?yàn)閚odejs最適合做這種小工具型奥,開(kāi)發(fā)簡(jiǎn)單,運(yùn)行穩(wěn)定碉京。
flutter 實(shí)現(xiàn)
已經(jīng) 開(kāi)源至 github 我做的網(wǎng)站整套代碼都在這里
ibaozi
請(qǐng)看如圖中的代碼實(shí)現(xiàn)
nodejs 實(shí)現(xiàn)
跟大家分享下經(jīng)驗(yàn)
其實(shí)最大的難點(diǎn)就是厢汹,包名的替換,關(guān)鍵字的替換收夸,網(wǎng)上搜了很多坑匠,找到如下幾個(gè)特別火的,可以任選其一實(shí)現(xiàn)
https://yeoman.io/
https://github.com/wycats/handlebars.js
參考項(xiàng)目:
https://github.com/dekzitfz/generator-code-base-android
最關(guān)鍵的代碼實(shí)現(xiàn)
this.fs.copyTpl(
this.templatePath('settings.gradle'),
this.destinationPath(rootDir + '/settings.gradle'),
{app_name: this.answers.name.replace(/\s/g, '')}
);
該項(xiàng)目就是通過(guò)這段代碼卧惜,復(fù)制模版代碼,然后替換里面定義好的app_name夹纫,然后將替換好的代碼粘貼到另一個(gè)路徑里咽瓷。
todo
網(wǎng)站在重構(gòu)中,為了功能的完整性和穩(wěn)定性舰讹,未來(lái)會(huì)繼續(xù)更新茅姜,感謝您的支持,多多關(guān)注Jetpcak.net.cn月匣,未來(lái)會(huì)呈現(xiàn)一個(gè)完整的網(wǎng)站給您钻洒,感謝??