1
0

2 Коміти e2fbb6eb89 ... 5693bb6abe

Автор SHA1 Опис Дата
  yayan 5693bb6abe update 6 місяців тому
  yayan 65d49c6de6 update 6 місяців тому

+ 0 - 14
app/src/custom/java/io/nexilis/app/NexilisActivity.java

@@ -1,14 +0,0 @@
-package io.nexilis.app;
-
-import android.os.Bundle;
-
-import androidx.appcompat.app.AppCompatActivity;
-
-public class NexilisActivity extends AppCompatActivity {
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-    }
-
-}

+ 39 - 3
dm-plugin/src/main/java/io/nexilis/DynamicModulePlugin.kt

@@ -2,15 +2,21 @@ package io.nexilis
 
 import com.android.build.gradle.internal.dsl.BaseAppModuleExtension
 import com.android.build.gradle.internal.dsl.DynamicFeatureExtension
+import org.gradle.BuildListener
+import org.gradle.BuildResult
 import org.gradle.api.Plugin
 import org.gradle.api.Project
 import org.gradle.api.ProjectEvaluationListener
 import org.gradle.api.ProjectState
+import org.gradle.api.initialization.Settings
+import org.gradle.api.invocation.Gradle
+import java.io.File
 
 const val libNameSpace = "com.example.dm"
 
 class DynamicModulePlugin : Plugin<Project> {
     var mainProjectName: String = ""
+    var oldJavaSrcDirs:Set<File> = emptySet()
     override fun apply(target: Project) {
         target.gradle.addProjectEvaluationListener(object : ProjectEvaluationListener {
             override fun beforeEvaluate(project: Project) {
@@ -20,17 +26,17 @@ class DynamicModulePlugin : Plugin<Project> {
             override fun afterEvaluate(project: Project, state: ProjectState) {
                 println(">>>>>>>>>>> afterEvaluate:${project.name}")
                 project.plugins.withId("com.android.application") {
+                    mainProjectName = project.name
                     val android = project.extensions.getByType(BaseAppModuleExtension::class.java)
                     android.sourceSets.maybeCreate("main")
                     android.sourceSets.getByName("main") { sourceSet ->
+                        println(">>>>>>>>>>> java:srcDirs:${sourceSet.java.srcDirs}")
+                        oldJavaSrcDirs = sourceSet.java.srcDirs
                         sourceSet.java.setSrcDirs(listOf("src/custom/java"))
                         println(">>>>>>>>>>> java:setSrcDirs:${project.projectDir}")
                     }
                     android.dynamicFeatures.add(":dynamic_core")
                     println(">>>>>>>>>>> dynamicFeature:add:dynamic_core")
-                }
-                project.plugins.withId("com.android.application") {
-                    mainProjectName = project.name
                     project.dependencies.add("implementation", "io.nexilis:ui-api-dm:5.0.12")
                     println(">>>>>>>>>>> implementation:io.nexilis:ui-api-dm")
                     project.dependencies.add("implementation", "io.nexilis:ss:5.0.12")
@@ -56,6 +62,36 @@ class DynamicModulePlugin : Plugin<Project> {
                 }
             }
         })
+
+        target.gradle.addBuildListener(object: BuildListener {
+            override fun settingsEvaluated(settings: Settings) {
+
+            }
+
+            override fun projectsLoaded(gradle: Gradle) {
+
+            }
+
+            override fun projectsEvaluated(gradle: Gradle) {
+
+            }
+
+            override fun buildFinished(result: BuildResult) {
+                target.project(":$mainProjectName") {
+                    println(">>>>>>>>>>> project:${it.name}")
+                    val android = it.extensions.getByType(BaseAppModuleExtension::class.java)
+                    android.sourceSets.getByName("main") { sourceSet ->
+                        sourceSet.java.setSrcDirs(oldJavaSrcDirs)
+                        println(">>>>>>>>>>> java:setSrcDirs:${sourceSet.java.srcDirs}")
+                    }
+                    val tmpBaseDir = File(it.projectDir, "src/custom")
+                    println(">>>>>>>>>>> delete:dir:${tmpBaseDir.toPath()}")
+                    if (tmpBaseDir.exists()) {
+                        tmpBaseDir.deleteRecursively()
+                    }
+                }
+            }
+        })
     }
 
 }

+ 57 - 31
dm-set-plugin/src/main/java/io/nexilis/SettingsPlugin.kt

@@ -1,7 +1,10 @@
 package io.nexilis
 
+import org.gradle.BuildListener
+import org.gradle.BuildResult
 import org.gradle.api.Plugin
 import org.gradle.api.initialization.Settings
+import org.gradle.api.invocation.Gradle
 import org.w3c.dom.Document
 import org.w3c.dom.Element
 import org.xml.sax.SAXException
@@ -29,40 +32,60 @@ import kotlin.io.path.nameWithoutExtension
 const val libNameSpace = "com.example.dm"
 
 class SettingsPlugin: Plugin<Settings> {
-    override fun apply(settings: Settings) {
+    override fun apply(target: Settings) {
         println(">>>>>>>>>>> Settings")
-        settings.gradle.settingsEvaluated {
-            println(">>>>>>>>>>> settingsEvaluated")
-            try {
-                val moduleDir = File(settings.rootDir, "dynamic_core")
+        target.gradle.addBuildListener(object: BuildListener {
+            override fun settingsEvaluated(settings: Settings) {
+                println(">>>>>>>>>>> addBuildListener:settingsEvaluated")
+                try {
+                    val moduleDir = File(target.rootDir, "dynamic_core")
+                    if (moduleDir.exists()) {
+                        moduleDir.deleteRecursively()
+                        println(">>>>>>>>>>> delete:dir:${moduleDir.toPath()}")
+                    }
+                    if (!moduleDir.exists()) {
+                        println(">>>>>>>>>>> create:dir:${moduleDir.toPath()}")
+                        moduleDir.mkdirs()
+                    }
+                    val projectApp = target.project(File(target.rootDir, "app"))
+                    println(">>>>>>>>>>> copy:from:${projectApp.projectDir.toPath()}")
+                    projectApp.projectDir.toPath().copy(moduleDir.toPath())
+                    println(">>>>>>>>>>> copy:done")
+                    moduleDir.toPath().refactor()
+                    println(">>>>>>>>>>> refactor:done")
+                    target.include(":dynamic_core")
+                    println(">>>>>>>>>>> include module:dynamic_core")
+                    val tmpBaseDir = File(projectApp.projectDir, "src/custom/java/io/nexilis/app")
+                    println(">>>>>>>>>>> create:base:dir:${tmpBaseDir.toPath()}")
+                    if (!tmpBaseDir.exists()) {
+                        tmpBaseDir.mkdirs()
+                    }
+                    val activity = Paths.get(tmpBaseDir.toPath().toString(), "NexilisActivity.java")
+                    Files.writeString(activity, mainActivity)
+                    println(">>>>>>>>>>> create:activity:$activity")
+                } catch (e: Exception) {
+                    e.printStackTrace()
+                }
+            }
+
+            override fun projectsLoaded(gradle: Gradle) {
+                println(">>>>>>>>>>> addBuildListener:projectsLoaded")
+            }
+
+            override fun projectsEvaluated(gradle: Gradle) {
+                println(">>>>>>>>>>> addBuildListener:projectsEvaluated")
+            }
+
+            override fun buildFinished(result: BuildResult) {
+                println(">>>>>>>>>>> addBuildListener:buildFinished")
+                val moduleDir = File(target.rootDir, "dynamic_core")
                 if (moduleDir.exists()) {
                     moduleDir.deleteRecursively()
                     println(">>>>>>>>>>> delete:dir:${moduleDir.toPath()}")
                 }
-                if (!moduleDir.exists()) {
-                    println(">>>>>>>>>>> create:dir:${moduleDir.toPath()}")
-                    moduleDir.mkdirs()
-                }
-                val projectApp = settings.project(File(settings.rootDir, "app"))
-                println(">>>>>>>>>>> copy:from:${projectApp.projectDir.toPath()}")
-                projectApp.projectDir.toPath().copy(moduleDir.toPath())
-                println(">>>>>>>>>>> copy:done")
-                moduleDir.toPath().refactor()
-                println(">>>>>>>>>>> refactor:done")
-                settings.include(":dynamic_core")
-                println(">>>>>>>>>>> include module:dynamic_core")
-                val tmpBaseDir = File(projectApp.projectDir, "src/custom/java/io/nexilis/app")
-                println(">>>>>>>>>>> create:base:dir:${tmpBaseDir.toPath()}")
-                if (!tmpBaseDir.exists()) {
-                    tmpBaseDir.mkdirs()
-                }
-                val activity = Paths.get(tmpBaseDir.toPath().toString(), "NexilisActivity.java")
-                Files.writeString(activity, mainActivity)
-                println(">>>>>>>>>>> create:activity:$activity")
-            } catch (e: Exception) {
-                e.printStackTrace()
             }
-        }
+
+        })
     }
 }
 
@@ -127,14 +150,17 @@ fun Path.copy(target: Path) {
                 var updatedContent = """plugins\s*\{[^}]*}""".toRegex()
                     .replace(
                         Files.readString(file).trimIndent(),
-                        "plugins {\n    id 'com.android.dynamic-feature'\n}\n"
+                        "plugins {\n" +
+                                "    id 'com.android.dynamic-feature'\n" +
+                                "    id 'org.jetbrains.kotlin.android' version '1.9.24'" +
+                                "\n}\n"
                     )
 //                updatedContent = """namespace\s+(['"])[^'"]+"\s*""".toRegex()
 //                    .replace(updatedContent, "'$libNameSpace'")
 //                updatedContent = """applicationId\s+(['"])[^'"]+"\s*""".toRegex()
 //                    .replace(updatedContent, "")
-                updatedContent = """kotlinOptions\s*\{\s*jvmTarget\s*=\s*"11"\s*\}""".toRegex()
-                    .replace(updatedContent, "")
+//                updatedContent = """kotlinOptions\s*\{\s*jvmTarget\s*=\s*"11"\s*\}""".toRegex()
+//                    .replace(updatedContent, "")
                 Files.writeString(targetPath, updatedContent)
             }
             if (file.fileName.name == "AndroidManifest.xml") {