Android編譯期動(dòng)態(tài)添加assets

背景

開發(fā)過程中會(huì)有這樣一種需求:app需要從遠(yuǎn)程獲取部分前置資源(比如接口配置信息)替蛉。通常做法是打包前手動(dòng)內(nèi)置到assets中,但這種方式比較低效,今天我們就來討論一種自動(dòng)化的過程

自定義Gradle插件獲取遠(yuǎn)程資源并配置到sourceSets中

class PreloadAssetsPlugin : Plugin<Project> {
    override fun apply(target: Project) {
        // 判斷是否為主工程
        if (target.plugins.hasPlugin("com.android.application")) {
            val pathSeparator = File.separator
            // 自定義asset目錄
            val tmpAssetDir = "${target.rootDir}${pathSeparator}tmpasset${pathSeparator}PreloadPlugin${pathSeparator}assets"
            val assetDir = File(tmpAssetDir)
            println(tmpAssetDir)
            // 執(zhí)行網(wǎng)絡(luò)請(qǐng)求,獲取預(yù)加載信息
            if (!assetDir.exists()) {
                assetDir.mkdirs()
            }

            // 緩存文件
            val cacheFile = File(tmpAssetDir, "app_service_api.json")

            // 執(zhí)行網(wǎng)絡(luò)請(qǐng)求
            val okHttpClient = OkHttpClient()
            val request = Request.Builder().url("https://api.uomg.com/api/rand.qinghua?format=json")
                .get().build()

            val response = okHttpClient.newCall(request).execute().body?.string()

            // 寫入緩存文件
            FileUtils.writeStringToFile(cacheFile, response, "utf-8")

            target.afterEvaluate { project ->
                val android = project.extensions.getByName("android") as AppExtension
                val mainSourceSet = android.sourceSets.getByName("main")
                // 動(dòng)態(tài)添加asset目錄
                mainSourceSet.assets.srcDirs(tmpAssetDir)
                println("source assets = ${mainSourceSet.assets.srcDirs}")
            }
        } else {
            throw IllegalStateException("只能在主工程模塊中使用資源預(yù)加載插件!")
        }
    }
}

使用

應(yīng)用了該插件build之后阿逃,會(huì)在項(xiàng)目跟目錄生成我們指定的assets目錄以及文件


9D9EF183-29A7-4860-A7D4-8AA04EFDF775.png

最終也會(huì)打包到app里


2EF39414-FE1A-440d-888A-0B2E976CE8EC.png

最后

上面的demo只是一個(gè)思路,最終形態(tài)還有需要完善的地方:

  • 臨時(shí)目錄需要配置ignore赃蛛,避免污染項(xiàng)目代碼
  • 文件緩存的策略恃锉?每次都需要下載?
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末呕臂,一起剝皮案震驚了整個(gè)濱河市破托,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌歧蒋,老刑警劉巖土砂,帶你破解...
    沈念sama閱讀 211,561評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件州既,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡萝映,警方通過查閱死者的電腦和手機(jī)吴叶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來序臂,“玉大人蚌卤,你說我怎么就攤上這事∶澈辏” “怎么了造寝?”我有些...
    開封第一講書人閱讀 157,162評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)吭练。 經(jīng)常有香客問我诫龙,道長(zhǎng),這世上最難降的妖魔是什么鲫咽? 我笑而不...
    開封第一講書人閱讀 56,470評(píng)論 1 283
  • 正文 為了忘掉前任签赃,我火速辦了婚禮,結(jié)果婚禮上分尸,老公的妹妹穿的比我還像新娘锦聊。我一直安慰自己,他們只是感情好箩绍,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評(píng)論 6 385
  • 文/花漫 我一把揭開白布孔庭。 她就那樣靜靜地躺著,像睡著了一般材蛛。 火紅的嫁衣襯著肌膚如雪圆到。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,806評(píng)論 1 290
  • 那天卑吭,我揣著相機(jī)與錄音芽淡,去河邊找鬼。 笑死豆赏,一個(gè)胖子當(dāng)著我的面吹牛挣菲,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播掷邦,決...
    沈念sama閱讀 38,951評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼白胀,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了耙饰?” 一聲冷哼從身側(cè)響起纹笼,我...
    開封第一講書人閱讀 37,712評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎苟跪,沒想到半個(gè)月后廷痘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,166評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡件已,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評(píng)論 2 327
  • 正文 我和宋清朗相戀三年笋额,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片篷扩。...
    茶點(diǎn)故事閱讀 38,643評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡兄猩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鉴未,到底是詐尸還是另有隱情枢冤,我是刑警寧澤,帶...
    沈念sama閱讀 34,306評(píng)論 4 330
  • 正文 年R本政府宣布铜秆,位于F島的核電站淹真,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏连茧。R本人自食惡果不足惜核蘸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望啸驯。 院中可真熱鬧客扎,春花似錦、人聲如沸罚斗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)针姿。三九已至袱吆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間搓幌,已是汗流浹背杆故。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留溉愁,地道東北人处铛。 一個(gè)月前我還...
    沈念sama閱讀 46,351評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像拐揭,于是被迫代替她去往敵國(guó)和親撤蟆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容