You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何开发Android Studio插件以向其示例项目列表添加自定义示例项目

如何开发Android Studio插件以向其示例项目列表添加自定义示例项目

当然可以实现!其实Android Studio的示例项目列表完全可以通过插件扩展,我来一步步给你拆解具体怎么做,帮你把自己的示例项目加入到官方的示例列表中:

一、核心原理先搞懂

Android Studio的示例项目系统基于IntelliJ Platform的扩展机制,核心是通过实现SampleProvider接口,向Android Studio注册你的自定义示例源。这个接口是Android Studio专门为扩展示例列表提供的扩展点,只要正确实现并注册,你的示例就会出现在新建项目的示例列表里。

二、具体实现步骤

1. 创建基础的IntelliJ插件项目

因为Android Studio是基于IntelliJ IDEA平台的,所以我们需要用IntelliJ Plugin SDK来开发:

  • 打开Android Studio(或者IntelliJ IDEA),选择New Project -> Plugin -> IntelliJ Platform Plugin
  • 填写插件的基本信息(比如名称、包名),选择目标Android Studio版本的SDK(建议选你常用的AS版本,比如Hedgehog)

2. 在插件配置文件中注册扩展点

找到项目中的plugin.xml文件,在里面声明对Android Studio示例提供器的扩展。这个配置告诉Android Studio:“我有一组自定义示例要加入列表”。

示例配置代码:

<idea-plugin>
    <id>com.yourcompany.yourplugin.customsamples</id>
    <name>我的自定义Android示例</name>
    <version>1.0</version>
    <vendor email="your-email@example.com" url="https://yourcompany.com">你的公司/个人名称</vendor>

    <extensions defaultExtensionNs="com.android.tools.idea.wizard.template">
        <!-- 注册自定义示例提供器 -->
        <sampleProvider implementation="com.yourcompany.yourplugin.MyCustomSampleProvider" />
    </extensions>
</idea-plugin>

3. 实现SampleProvider接口

创建一个Java/Kotlin类,实现com.android.tools.idea.wizard.template.SampleProvider接口,这个类是连接你的示例项目和Android Studio的核心。

下面是一个Kotlin的示例实现(Java版本逻辑完全一致):

import com.android.tools.idea.wizard.template.Sample
import com.android.tools.idea.wizard.template.SampleProvider
import com.intellij.openapi.project.Project
import java.io.InputStream
import java.nio.file.Files
import java.nio.file.Paths
import java.util.zip.ZipInputStream

class MyCustomSampleProvider : SampleProvider {
    override fun getDisplayName(): String = "我的自定义示例集合"
    // 这个名称会作为分组标题显示在示例列表中

    override fun getDescription(): String? = "包含我开发的Jetpack Compose、MVVM等架构的示例项目"

    override fun getSamples(): List<Sample> {
        // 定义你的每个示例项目
        return listOf(
            Sample(
                name = "Compose待办事项示例",
                description = "基于Jetpack Compose + Room的离线待办事项应用",
                url = "/samples/compose-todo.zip", // 插件资源中的示例包路径
                category = "Compose",
                tags = listOf("Jetpack Compose", "Room", "MVVM")
            ),
            Sample(
                name = "Material3 UI示例",
                description = "使用Material3组件构建的现代化UI应用",
                url = "https://your-server.com/material3-sample.zip", // 远程示例包地址
                category = "UI",
                tags = listOf("Material3", "View")
            )
        )
    }

    override fun generate(sample: Sample, project: Project, path: String): Boolean {
        return try {
            // 根据示例的URL类型,处理下载/解压逻辑
            if (sample.url.startsWith("/")) {
                // 本地插件资源中的示例包
                val inputStream = javaClass.getResourceAsStream(sample.url)
                inputStream?.use { unzip(it, path) }
            } else {
                // 远程示例包,这里需要实现网络下载逻辑(建议用IntelliJ的ProgressManager显示进度)
                val url = java.net.URL(sample.url)
                val inputStream = url.openStream()
                inputStream.use { unzip(it, path) }
            }
            true
        } catch (e: Exception) {
            e.printStackTrace()
            false
        }
    }

    // 辅助解压方法
    private fun unzip(inputStream: InputStream, targetPath: String) {
        val zipInputStream = ZipInputStream(inputStream)
        var entry = zipInputStream.nextEntry
        while (entry != null) {
            val entryPath = Paths.get(targetPath, entry.name)
            if (entry.isDirectory) {
                Files.createDirectories(entryPath)
            } else {
                Files.createDirectories(entryPath.parent)
                Files.copy(zipInputStream, entryPath)
            }
            zipInputStream.closeEntry()
            entry = zipInputStream.nextEntry
        }
        zipInputStream.close()
    }
}

4. 准备示例资源并打包插件

  • 如果是本地示例:将你的示例项目打包成zip文件,放在插件项目的resources/samples目录下(需要手动创建这个目录)
  • 构建插件:在Android Studio中执行Build -> Prepare Plugin Module for Deployment,生成插件的jar/zip包
  • 测试插件:打开Android Studio,进入Settings -> Plugins -> Install Plugin from Disk...,选择生成的插件包安装,重启AS后就能在新建项目的示例列表中看到你的自定义示例了

三、关键注意事项

  • 版本兼容性:不同版本的Android Studio可能对SampleProvider接口有小调整,建议针对你要支持的AS版本选择对应的SDK进行开发
  • 用户体验优化:处理远程示例时,一定要用IntelliJ的ProgressManager显示下载进度,避免用户以为程序卡死;同时要处理网络异常、解压失败等情况,给出友好提示
  • 参考官方实现:你可以查看Android Studio自带的GoogleSampleProvider类的源码,学习官方的示例加载、生成逻辑,这会帮你少走很多弯路

如果在实现过程中遇到具体问题,比如扩展点注册报错、解压逻辑异常,随时可以细化提问,我再帮你针对性解决!

备注:内容来源于stack exchange,提问作者Njuacha Hubert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 07:49:33