import org.jetbrains.dokka.gradle.engine.parameters.VisibilityModifier import org.jetbrains.kotlin.gradle.utils.COMPILE import org.jetbrains.kotlin.gradle.utils.COMPILE_ONLY plugins { alias(libs.plugins.android.library) alias(libs.plugins.kotlin.android) id("kotlin-kapt") id("kotlin-parcelize") // id("maven-publish") // signing // id ("org.jreleaser") version "1.20.0"//JReleaser now has support for publishing via the Central Publisher Portal and can be used via their Gradle plugin integration. // id("org.jetbrains.dokka") version "2.0.0" // kotlin("jvm") version "2.1.0" // Generates HTML documentation id("org.jetbrains.dokka") version "2.1.0" // Generates Javadoc documentation id("org.jetbrains.dokka-javadoc") version "2.1.0" } android { namespace = "com.cusc.map" compileSdk = 35 defaultConfig { minSdk = 29 version = "2.0" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" consumerProguardFiles("consumer-rules.pro") } buildTypes { release { isMinifyEnabled = false proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" ) } } compileOptions { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 } kotlinOptions { jvmTarget = "11" } buildFeatures { // dataBinding = true viewBinding = true } android.libraryVariants.all { outputs.all { if (this is com.android.build.gradle.internal.api.LibraryVariantOutputImpl) { // val config = project.android.defaultConfig // val versionName = config.versionName // val formatter = DateTimeFormatter.ofPattern("yyyy_MM_dd_HHmm") // val createTime = LocalDateTime.now().format(formatter) outputFileName = "cusc_map_${version}.aar" } } } } dependencies { implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar", "*.aar")))) implementation(libs.androidx.core.ktx) implementation(libs.androidx.appcompat) implementation(libs.material) implementation(libs.androidx.constraintlayout) implementation(libs.androidx.activity) testImplementation(libs.junit) androidTestImplementation(libs.androidx.junit) androidTestImplementation(libs.androidx.espresso.core) // implementation("org.jetbrains.dokka:android-documentation-plugin:2.1.0") // dokkaJavadocPlugin("org.jetbrains.dokka:kotlin-as-java-plugin:2.1.0") dokkaJavadocPlugin("org.jetbrains.dokka:kotlin-as-java-plugin") // dokkaHtmlPlugin("org.jetbrains.dokka:kotlin-as-java-plugin") api(project(":maplibs")) // Webview交互 api("com.github.lzyzsd:jsbridge:1.0.4") //四维高精地图依赖 // implementation("daohang.tingche.unityLibrary:adas:1.0") //高德 // implementation("com.amap.api:navi-3dmap:latest.integration") // implementation("com.amap.api:search:latest.integration") //网络 implementation("com.squareup.okhttp3:okhttp:3.12.0") implementation("com.google.code.gson:gson:2.8.6") // 权限请求框架 implementation("com.guolindev.permissionx:permissionx:1.8.1") // ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2") //fragment-ktx implementation("androidx.fragment:fragment-ktx:1.8.0") // compileOnly("org.jsoup:jsoup:1.17.2") // 最新稳定版 } dokka { /* pluginsConfiguration.html { // customAssets.from("logo.png") customStyleSheets.from("dokka/dokka-custom.css") // footerMessage.set("(c) Your Company") // separateInheritedMembers.set(false) // templatesDir.set(file("dokka/templates")) // mergeImplicitExpectActualDeclarations.set(false) }*/ dokkaPublications.html { offlineMode.set(true) } dokkaPublications.javadoc { moduleName.set("CMapSDK") // moduleVersion.set(project.version.toString()) description = "Android 地图SDK" // Standard output directory for HTML documentation // outputDirectory.set(layout.buildDirectory.dir("dokka/html")) failOnWarning.set(false) // 禁用包列表的树形展示 suppressInheritedMembers.set(true) suppressObviousFunctions.set(true) offlineMode.set(true) dokkaSourceSets { configureEach { includes.from("package-info.md") skipEmptyPackages.set(false) skipDeprecated.set(false) suppressGeneratedFiles.set(true) jdkVersion.set(17) documentedVisibilities.set(setOf(VisibilityModifier.Public)) // OR documentedVisibilities(VisibilityModifier.Public) perPackageOption { matchingRegex.set(".*map2d\\.amap|.*map2d\\.mine") suppress.set(true)//suppress = true:完全禁用匹配包的文档生成 } perPackageOption { matchingRegex.set(".*core.*|.*fragments.*|.*scenario\\.mine.*|overlay") suppress.set(true)//suppress = true:完全禁用匹配包的文档生成 } perPackageOption { matchingRegex.set(".*ui\\.dialog.*|.*ui\\.widget.*|.*utils.*|.*vms.*") suppress.set(true)//suppress = true:完全禁用匹配包的文档生成 // skipDeprecated.set(false) // reportUndocumented.set(false) // documentedVisibilities.set( // setOf( // VisibilityModifier.Public, // VisibilityModifier.Private, // VisibilityModifier.Protected, // VisibilityModifier.Internal, // VisibilityModifier.Package // )) } } } } } // 新增删除Tree和Package标签的Gradle任务 tasks.register("removeUnwantedTags") { group = "documentation" description = "删除HTML文档中所有的Tree和Package标签及相关链接" // 定义HTML文件所在目录(根据实际dokka输出目录调整) val docOutputDir = layout.buildDirectory.dir("dokka/javadoc") inputs.dir(docOutputDir) outputs.dir(docOutputDir) doLast { val docDir = docOutputDir.get().asFile if (!docDir.exists()) { println("文档目录不存在: ${docDir.absolutePath}") return@doLast } // 遍历所有HTML文件 docDir.walk().filter { it.isFile && it.extension == "html" }.forEach { htmlFile -> println("处理文件: ${htmlFile.absolutePath}") // 读取文件内容 var content = htmlFile.readText(Charsets.UTF_8) // 1. 删除导航栏中的Tree标签(匹配标准格式+变体) val treeNavPattern = Regex("""
  • Tree
  • """) val treeLinkPattern = Regex("""
  • Tree
  • """) // val treeLinkPattern = Regex("""
  • Tree
  • """) content = content.replace(treeNavPattern, "") content = content.replace(treeLinkPattern, "") // 2. 删除导航栏中的Package标签(核心新增逻辑) // 匹配标准Package标签行(含前后空白) val packageNavPattern = Regex("""\s*
  • Package
  • \s*""") // 匹配带额外属性的Package标签变体(如class/style等) content = content.replace(packageNavPattern, "") // 3.1 导航栏中的Deprecated入口标签(标准格式+带属性变体) val deprecatedNavPattern = Regex("""
  • Deprecated
  • """) content = content.replace(deprecatedNavPattern, "") // 删除Class标签 val clsNavPattern = Regex("""
  • Class
  • """) content = content.replace(clsNavPattern, "") //删除Help标签 val helpNavPattern = Regex("""
  • Help
  • """) content = content.replace(helpNavPattern, "") // ========== 4. 删除冗余文件 ========== /* val redundantFiles = listOf( docDir.resolve("overview-tree.html"), // Tree相关文件 docDir.resolve("deprecated.html") // Deprecated相关文件 ) redundantFiles.forEach { file -> if (file.exists()) { file.delete() println("🗑️ 删除冗余文件: ${file.absolutePath}") } }*/ // 覆盖原文件 htmlFile.writeText(content, Charsets.UTF_8) println("已移除标签: ${htmlFile.absolutePath}") } } } // 可选:让dokka任务执行完成后自动执行删除Tree标签任务 tasks.named("dokkaGenerateJavadoc") { finalizedBy("removeUnwantedTags") } // 在 build.gradle.kts 中添加 tasks.register("generateOverviewTree") { group = "documentation" description = "Generate overview-tree.html for Javadoc" doLast { val outputDir = file("${layout.buildDirectory.get()}/dokka/javadoc") outputDir.mkdirs() val treeFile = outputDir.resolve("overview-tree.html") // 读取现有的包信息 val packages = mutableListOf>().apply { add("com.cusc.map.location" to "定位包,提供定位功能") add("com.cusc.map.map2d" to "二维地图包,提供栅格地图显示、覆盖物绘制等功能") add("com.cusc.map.map2d.cdata" to "二维地图包数据业务实体") add("com.cusc.map.map2d.inters" to "二维地图接口包") add("com.cusc.map.map3d" to "三维地图包,基于3dtitle的地图绘制") add("com.cusc.map.parkroad" to "车道局部地图包") add("com.cusc.map.scenario" to "业务相关包,提供车辆、感知物、预警管理") add("com.cusc.map.scenario.bean" to "业务数据实体类") add("com.cusc.map.ui" to "界面相关包,包含地图底图") } // 构建包层次结构 val packageTree = mutableMapOf>>() packages.forEach { (pkg, desc) -> val parts = pkg.split(".") if (parts.size > 3) { // 假设 com.cusc.map 是根包 val parent = parts.take(3).joinToString(".") val child = pkg packageTree.getOrPut(parent) { mutableListOf() }.add(child to desc) } } // 生成HTML内容 val htmlContent = """ mapapi 1.0.0
    • com.cusc.map
        ${ packages.joinToString("") { (pkg, desc) -> val pkgPath = pkg.replace(".", "/") """
      • $pkg $desc
      • """ } }
    """.trimIndent() treeFile.writeText(htmlContent) println("Generated overview-tree.html at: ${treeFile.absolutePath}") } } //group = "msmap" //version = "1.0" //publishing { // publications { // create("maplib") { // groupId = "io.github.killcow" // artifactId = "ms-map" // version = "1.0.0" // // // 如果是Android库模块 // artifact(layout.buildDirectory.dir("outputs/aar/maplibrary-release.aar")) // // 如果是Java库模块 // // artifact("$buildDir/libs/your-library.jar") // //发布到本地仓库 // repositories { // maven { // name = "MyRepo" // url = uri(layout.buildDirectory.dir("repo")) // } // // } // } // } //} //signing { //// val signingKey: String=findProperty("signing.keyId") // val signingPassword: String? by project // useInMemoryPgpKeys(findProperty("signing.keyId").toString(), findProperty("signing.password").toString()) //// // sign(publishing.publications["maplib"]) //}