Wizard: add mpp mobile library template

This commit is contained in:
Ilya Kirillov
2020-03-20 16:38:42 +03:00
parent d9a88b4156
commit 732154cef5
9 changed files with 215 additions and 6 deletions
@@ -0,0 +1,61 @@
plugins {
id 'org.jetbrains.kotlin.multiplatform' version '1.3.70'
id 'com.android.application'
id 'kotlin-android-extensions'
}
group = 'me.user'
version = '1.0-SNAPSHOT'
repositories {
gradlePluginPortal()
google()
jcenter()
mavenCentral()
}
kotlin {
android()
iosX64('ios')
sourceSets {
commonMain {
dependencies {
implementation kotlin('stdlib-common')
}
}
commonTest {
dependencies {
implementation kotlin('test-common')
implementation kotlin('test-annotations-common')
}
}
androidMain {
dependencies {
implementation kotlin('stdlib-jdk7')
implementation 'androidx.core:core-ktx:1.1.0'
}
}
androidTest {
}
iosMain {
}
iosTest {
}
}
}
android {
compileSdkVersion 29
defaultConfig {
applicationId 'me.user.android'
minSdkVersion 24
targetSdkVersion 29
versionCode 1
versionName '1.0'
}
buildTypes {
'release' {
minifyEnabled false
}
}
}
@@ -0,0 +1,55 @@
plugins {
kotlin("multiplatform") version "1.3.70"
id("com.android.application")
id("kotlin-android-extensions")
}
group = "me.user"
version = "1.0-SNAPSHOT"
repositories {
gradlePluginPortal()
google()
jcenter()
mavenCentral()
}
kotlin {
android()
iosX64("ios")
sourceSets {
val commonMain by getting {
dependencies {
implementation(kotlin("stdlib-common"))
}
}
val commonTest by getting {
dependencies {
implementation(kotlin("test-common"))
implementation(kotlin("test-annotations-common"))
}
}
val androidMain by getting {
dependencies {
implementation(kotlin("stdlib-jdk7"))
implementation("androidx.core:core-ktx:1.1.0")
}
}
val androidTest by getting
val iosMain by getting
val iosTest by getting
}
}
android {
compileSdkVersion(29)
defaultConfig {
applicationId = "me.user.android"
minSdkVersion(24)
targetSdkVersion(29)
versionCode = 1
versionName = "1.0"
}
buildTypes {
getByName("release") {
isMinifyEnabled = false
}
}
}
@@ -0,0 +1,16 @@
pluginManagement {
repositories {
gradlePluginPortal()
google()
jcenter()
}
resolutionStrategy {
eachPlugin {
if (requested.id.namespace == 'com.android' || requested.id.name == 'kotlin-android-extensions') {
useModule('com.android.tools.build:gradle:3.5.2')
}
}
}
}
rootProject.name = 'MultiplatformMobileLibrary'
@@ -0,0 +1,16 @@
pluginManagement {
repositories {
gradlePluginPortal()
google()
jcenter()
}
resolutionStrategy {
eachPlugin {
if (requested.id.namespace == "com.android" || requested.id.name == "kotlin-android-extensions") {
useModule("com.android.tools.build:gradle:3.5.2")
}
}
}
}
rootProject.name = "MultiplatformMobileLibrary"
@@ -63,6 +63,11 @@ public class ProjectTemplateBuildFileGenerationTestGenerated extends AbstractPro
runTest("libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/multiplatformLibrary/");
}
@TestMetadata("multiplatformMobileLibrary")
public void testMultiplatformMobileLibrary() throws Exception {
runTest("libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/multiplatformMobileLibrary/");
}
@TestMetadata("nativeConsoleApplication")
public void testNativeConsoleApplication() throws Exception {
runTest("libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/nativeConsoleApplication/");
@@ -4,6 +4,7 @@ import org.jetbrains.kotlin.tools.projectWizard.core.buildList
import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.*
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.*
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.KotlinPlugin
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleSubType
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ProjectKind
import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem
@@ -54,6 +55,7 @@ sealed class ProjectTemplate : DisplayableSettingItem {
MultiplatformLibrary,
AndroidApplication,
IOSApplication,
MultiplatformMobileLibrary,
NativeConsoleApplication,
JsBrowserApplication
)
@@ -284,4 +286,41 @@ object IOSApplication : ProjectTemplate() {
)
)
)
}
object MultiplatformMobileLibrary : ProjectTemplate() {
override val title = "Multiplatform Mobile Library"
override val description = "Create a library that supports sharing code between iOS and Android."
override val suggestedProjectName = "myMppMobileLibrary"
override val projectKind = ProjectKind.Multiplatform
override val setsPluginSettings: List<SettingWithValue<*, *>>
get() = listOf(
KotlinPlugin::modules withValue listOf(
MultiplatformModule(
"library",
listOf(
ModuleType.common.createDefaultTarget(),
Module(
"android",
AndroidTargetConfigurator,
null,
SourcesetType.ALL.map { type ->
Sourceset(type, dependencies = emptyList())
},
emptyList()
),
Module(
"ios",
RealNativeTargetConfigurator.configuratorsByModuleType.getValue(ModuleSubType.iosX64),
null,
SourcesetType.ALL.map { type ->
Sourceset(type, dependencies = emptyList())
},
emptyList()
)
)
)
)
)
}