Android项目实战(七十二): 生成arms框架的模板插件

参考:
https://github.com/sionsxie/arms-template-plugin

这里我直接clone该项目进行二次修改

1、clone项目到本地

2、修改根目录下的gradle.properties文件内容

# IntelliJ Platform Artifacts Repositories
# -> https://plugins.jetbrains.com/docs/intellij/intellij-artifacts.html
# 插件的group 和包名相同
pluginGroup = com.github.sionsxie.armstemplateplugin
#插件名称
pluginName = arms-template-plugin
pluginRepositoryUrl = https://github.com/sionsxie/arms-template-plugin
# SemVer format -> https://semver.org
pluginVersion = 1.0.0  #版本号 自行定义

# Supported build number ranges and IntelliJ Platform versions -> https://plugins.jetbrains.com/docs/intellij/build-number-ranges.html
pluginSinceBuild = 252   #最小支持版本 从About Android studio 中获取 例如:Build #AI-252.27397.103.2522.14617522, built on December 19, 2025
pluginUntilBuild = 252.*

# IntelliJ Platform Properties -> https://plugins.jetbrains.com/docs/intellij/tools-gradle-intellij-plugin.html#configuration-intellij-extension
platformType = IC
# https://plugins.jetbrains.com/docs/intellij/android-studio.html?from=jetbrains.org#matching-versions-of-the-intellij-platform-with-the-android-studio-version
# \u7F16\u8BD1\u7248\u672C\u7684ide \u5C31\u662F\u4F60\u8FD0\u884C\u65F6\u5B83\u8981\u4E0B\u8F7D\u7684ide\u7684\u7248\u672C
platformVersion = 2022.3.3
#platformDownloadSources = true

# Plugin Dependencies -> https://plugins.jetbrains.com/docs/intellij/plugin-dependencies.html
# Example: platformPlugins = com.intellij.java, com.jetbrains.php:203.4449.22
platformPlugins = java, com.intellij.java, org.jetbrains.android, android, org.jetbrains.kotlin

# Java language level used to compile sources and to generate the files for - Java 11 is required since 2020.3
# javaVersion = 11

# Gradle Releases -> https://github.com/gradle/gradle/releases
gradleVersion = 6.5

# Opt-out flag for bundling Kotlin standard library -> https://jb.gg/intellij-platform-kotlin-stdlib
kotlin.stdlib.default.dependency = false

# Enable Gradle Configuration Cache -> https://docs.gradle.org/current/userguide/configuration_cache.html
org.gradle.configuration-cache = true

# Enable Gradle Build Cache -> https://docs.gradle.org/current/userguide/build_cache.html
org.gradle.caching = true

# org.gradle.java.home = D:\\My_Soft\\Java\\jdk-11.0.12_windows-x64_bin\\jdk-11.0.12

3、添加自己的模版代码

image

 例如:

package other.src.app_package

import other.ArmsPluginTemplateProviderImpl

fun armsActivity(isKt: Boolean, provider: ArmsPluginTemplateProviderImpl) = if (isKt) armsActivityKt(provider) else armsActivityJava(provider)

private fun armsActivityKt(provider: ArmsPluginTemplateProviderImpl) = """
package ${provider.activityPackageName.value}
import android.app.Activity
import android.os.Bundle
import com.jess.arms.di.component.AppComponent
import ${provider.componentPackageName.value}.Dagger${provider.pageName.value}Component
import ${provider.moudlePackageName.value}.${provider.pageName.value}Module
import ${provider.contractPackageName.value}.${provider.pageName.value}Contract
import ${provider.presenterPackageName.value}.${provider.pageName.value}Presenter
import ${provider.appPackageName.value}.R
import kotlinx.android.synthetic.main.base_title.*

class ${provider.pageName.value}Activity : BaseEcloudActivity<${provider.pageName.value}Presenter>() , ${provider.pageName.value}Contract.View {
    override fun setupActivityComponent(appComponent: AppComponent) {
        Dagger${provider.pageName.value}Component //如找不到该类,请编译一下项目
                .builder()
                .appComponent(appComponent)
                .${provider.pageName.value[0].toLowerCase()}${provider.pageName.value.substring(1, provider.pageName.value.length)}Module(${provider.pageName.value}Module(this))
                .build()
                .inject(this)
    }
    override fun initView(savedInstanceState: Bundle?): Int {
        return R.layout.${provider.activityLayoutName.value} //如果你不需要框架帮你设置 setContentView(id) 需要自行设置,请返回 0
    }
    
    override fun initData(savedInstanceState: Bundle?) {
    }
    override fun getActivity(): Activity = this
}
    
"""

private fun armsActivityJava(provider: ArmsPluginTemplateProviderImpl) = """
package ${provider.activityPackageName.value};
import android.app.Activity
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import android.os.Bundle;
import butterknife.BindView;
import butterknife.ButterKnife;
import com.jess.arms.di.component.AppComponent;
import ${provider.componentPackageName.value}.Dagger${provider.pageName.value}Component;
import ${provider.moudlePackageName.value}.${provider.pageName.value}Module;
import ${provider.contractPackageName.value}.${provider.pageName.value}Contract;
import ${provider.presenterPackageName.value}.${provider.pageName.value}Presenter;
import ${provider.appPackageName.value}.R;

public class ${provider.pageName.value}Activity extends BaseEcloudActivity<${provider.pageName.value}Presenter> implements ${provider.pageName.value}Contract.View {
    @Override
    public void setupActivityComponent(@NonNull AppComponent appComponent) {
        Dagger${provider.pageName.value}Component //如找不到该类,请编译一下项目
                .builder()
                .appComponent(appComponent)
                .view(this)
                .build()
                .inject(this);
    }
    
    @Override
    public int initView(@Nullable Bundle savedInstanceState){
        return R.layout.${provider.activityLayoutName.value}; //如果你不需要框架帮你设置 setContentView(id) 需要自行设置,请返回 0
    }
    
    @Override
    public void initData(@Nullable Bundle savedInstanceState) {
    }
    
     @Override
    public void showLoading() {

    }

    @Override
    public void hideLoading() {

    }

    @Override
    public void killMyself() {
        finish();
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ButterKnife.bind(this);
    }
}
    
"""

 

最后执行

image

 

posted @ 2026-01-07 15:10  听着music睡  阅读(6)  评论(0)    收藏  举报