DoKitPluginConfigProcessor.kt 2.3 KB
Newer Older
J
jackjintai 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
package com.didichuxing.doraemonkit.plugin.processor

import com.android.build.gradle.AppExtension
import com.android.build.gradle.api.BaseVariant
import com.android.build.gradle.api.LibraryVariant
import com.didichuxing.doraemonkit.plugin.DoKitExtUtil
import com.didichuxing.doraemonkit.plugin.extension.DoKitExt
import com.didichuxing.doraemonkit.plugin.isRelease
import com.didichuxing.doraemonkit.plugin.println
import com.didichuxing.doraemonkit.plugin.transform.*
import com.didiglobal.booster.gradle.getAndroid
import com.didiglobal.booster.gradle.isDynamicFeature
import com.didiglobal.booster.gradle.project
import com.didiglobal.booster.gradle.variantData
import com.didiglobal.booster.task.spi.VariantProcessor
import com.didiglobal.booster.transform.ArtifactManager
import com.didiglobal.booster.transform.artifacts
import com.didiglobal.booster.transform.util.ComponentHandler
import com.google.auto.service.AutoService
import org.gradle.api.Project
import javax.xml.parsers.SAXParserFactory

/**
 * ================================================
 * 作    者:jint(金台)
 * 版    本:1.0
 * 创建日期:2020/5/15-11:28
 * 描    述:
 * 修订历史:
 * ================================================
 */
@AutoService(VariantProcessor::class)
class DoKitPluginConfigProcessor : VariantProcessor {
    override fun process(variant: BaseVariant) {
        if (variant is LibraryVariant || variant.variantData.isDynamicFeature()) {
            "error====>dokit plugin config must in the app module".println()
            return
        }

        if (variant.isRelease()) {
            return
        }

        //查找AndroidManifest.xml 文件路径
        variant.artifacts.get(ArtifactManager.MERGED_MANIFESTS).forEach { manifest ->
            val parser = SAXParserFactory.newInstance().newSAXParser()
            val handler = ComponentHandler()
            parser.parse(manifest, handler)
            DoKitExtUtil.setApplications(handler.applications)
            "applications path====>${handler.applications}".println()

        }


        //读取插件配置
        variant.project.getAndroid<AppExtension>().let { appExt ->
            //查找Application路径
            val doKitExt = variant.project.extensions.getByType(DoKitExt::class.java)
            DoKitExtUtil.init(doKitExt, appExt.defaultConfig.applicationId)
        }

    }


}