diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 8053fc7a91..d187f76210 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -14,9 +14,7 @@ moshi = "1.15.1" minSdk = "25" compileSdk = "34" -# Maps to this commit: https://android.googlesource.com/platform/prebuilts/studio/layoutlib/+/6c7316c -layoutlib = "2023.2.1-rc1-6c7316c" -layoutlibPrebuiltSha = "6c7316c" +layoutlib = "14.0.1" [libraries] androidx-annotations = { module = "androidx.annotation:annotation", version = "1.7.1" } @@ -47,11 +45,6 @@ ktlint = { module = "com.pinterest.ktlint:ktlint-rule-engine", version.ref = "kt kxml2 = { module = "kxml2:kxml2", version = "2.3.0" } -layoutlib-native-jdk11 = { module = "app.cash.paparazzi:layoutlib-native-jdk11", version.ref = "layoutlib" } -layoutlib-native-linux = { module = "app.cash.paparazzi:layoutlib-native-linux", version.ref = "layoutlib" } -layoutlib-native-macArm = { module = "app.cash.paparazzi:layoutlib-native-macarm", version.ref = "layoutlib" } -layoutlib-native-macOsX = { module = "app.cash.paparazzi:layoutlib-native-macosx", version.ref = "layoutlib" } -layoutlib-native-windows = { module = "app.cash.paparazzi:layoutlib-native-win", version.ref = "layoutlib" } moshi-adapters = { module = "com.squareup.moshi:moshi-adapters", version.ref = "moshi" } moshi-core = { module = "com.squareup.moshi:moshi", version.ref = "moshi" } @@ -60,7 +53,9 @@ moshi-kotlinReflect = { module = "com.squareup.moshi:moshi-kotlin", version.ref okio = { module = "com.squareup.okio:okio", version = "3.8.0" } tools-common = { module = "com.android.tools:common", version.ref = "androidTools" } -tools-layoutlib = { module = "com.android.tools.layoutlib:layoutlib-api", version = "31.3.0-rc01" } +tools-layoutlib-api = { module = "com.android.tools.layoutlib:layoutlib-api", version = "31.4.0-alpha03" } +tools-layoutlib = { module = "com.android.tools.layoutlib:layoutlib", version.ref = "layoutlib" } +tools-layoutlib-runtime = { module = "com.android.tools.layoutlib:layoutlib-runtime", version.ref = "layoutlib" } tools-ninepatch = { module = "com.android.tools:ninepatch", version.ref = "androidTools" } tools-sdkCommon = { module = "com.android.tools:sdk-common", version.ref = "androidTools" } diff --git a/libs/README.md b/libs/README.md deleted file mode 100644 index ee41e5d4b4..0000000000 --- a/libs/README.md +++ /dev/null @@ -1,54 +0,0 @@ -Paparazzi Libraries -------------------- - -This project publishes artifacts from [Android Studio's][android_studio] UI renderer to Maven -Central so that we can consume them in Paparazzi. - -Note that layoutlib's version tracks [Android Studio Releases][studio_releases] and not Paparazzi. - -1. Find the corresponding [Android Studio version][studio_versions] you wish to update LayoutLib to. - ``` - Flamingo => 2022.2.1 - ``` -2. Find and click the [tag][prebuilt_refs] for the prebuilt corresponding to that version. -3. Copy the commit short sha from the resulting page - ``` - # Example: https://android.googlesource.com/platform/prebuilts/studio/layoutlib/+/refs/tags/studio-2022.2.1 - - 512837137ea60b9b86836cab7169fec5c635f422 => 5128371 - ``` -4. Update commit link, `layoutlib` and `layoutlibPrebuiltSha` in `libs.versions.toml` as expected. - ``` - https://android.googlesource.com/platform/prebuilts/studio/layoutlib/+/5128371 - ... - layoutlib = "2022.2.1-5128371" - layoutlibPrebuiltSha = "5128371" - ``` -5. Build and upload: - ``` - ./gradlew publishMavenNativeLibraryPublicationToMavenCentralRepository - ``` - - This may take a few minutes. It clones a large repo (2.4 GiB) and then uploads a large artifact - (30 MiB) to Maven Central. - -6. Visit [Sonatype Nexus][nexus] to promote the artifact. Or drop it if there is a problem! -7. Once deploy is live, continue with changeset from step 4 to update Paparazzi to consume this - latest version. Here's an [example PR][dolphin_bump]. - - -Prerequisites -------------- - -In `~/.gradle/gradle.properties`, set the following: - - * `mavenCentralUsername` - Sonatype username for releasing to `app.cash`. - * `mavenCentralPassword` - Sonatype password for releasing to `app.cash`. - - -[android_studio]: https://developer.android.com/studio -[studio_releases]: https://developer.android.com/studio/releases -[studio_versions]: https://developer.android.com/studio/releases#android_gradle_plugin_and_android_studio_compatibility -[nexus]: https://oss.sonatype.org/ -[prebuilt_refs]: https://android.googlesource.com/platform/prebuilts/studio/layoutlib/+refs -[dolphin_bump]: https://github.com/cashapp/paparazzi/pull/639 diff --git a/libs/build.gradle b/libs/build.gradle deleted file mode 100644 index 24a3baacbe..0000000000 --- a/libs/build.gradle +++ /dev/null @@ -1 +0,0 @@ -ext.repoDir = rootProject.layout.buildDirectory.dir("prebuilts/studio/layoutlib").get().asFile diff --git a/libs/layoutlib/build.gradle b/libs/layoutlib/build.gradle deleted file mode 100644 index c0237ae32a..0000000000 --- a/libs/layoutlib/build.gradle +++ /dev/null @@ -1,61 +0,0 @@ -import org.ajoberstar.grgit.Grgit - -apply plugin: 'com.vanniktech.maven.publish' - -/** - * Clone AOSP's prebuilts repo to get a prebuilt layoutlib jar. This big repo that takes a long time to clone! - * - * https://android.googlesource.com/platform/prebuilts/studio/layoutlib/+/refs/tags/studio-4.1.0/PREBUILT - */ -tasks.register('cloneLayoutlib') { - it.outputs.dir(repoDir) - it.inputs.property('sha', libs.versions.layoutlibPrebuiltSha) - - doFirst { - // Gradle aggressively creates outputs directories, which interferes with the git clone check - if (repoDir.exists() && !repoDir.list()) { - repoDir.delete() - } - Grgit grgit - if (!repoDir.exists()) { - logger.warn('Cloning prebuilt layoutlib: this may take a few minutes...') - grgit = Grgit.clone { - dir = repoDir - uri = "https://android.googlesource.com/platform/prebuilts/studio/layoutlib" - } - logger.warn('Cloned prebuilt layoutlib.') - } else { - logger.warn('Using existing prebuilt layoutlib clone.') - grgit = Grgit.open { - dir = repoDir - } - } - grgit.withCloseable { repo -> - repo.fetch() - logger.warn("Checking out SHA ${libs.versions.layoutlibPrebuiltSha.get()}") - repo.checkout { - branch = libs.versions.layoutlibPrebuiltSha.get() - } - } - } -} - -/** - * Publish layoutlib.jar to Maven Central with Paparazzi coordinates. - */ -mavenPublishing { - coordinates(property("GROUP"), property("POM_ARTIFACT_ID"), libs.versions.layoutlib.get()) -} - -publishing { - publications { - mavenNativeLibrary(MavenPublication) { - artifact(tasks. - named("cloneLayoutlib"). - map { new File(it.outputs.files.getSingleFile(), 'data/layoutlib.jar') } - ) - artifact emptySourcesJar - artifact emptyJavadocJar - } - } -} diff --git a/libs/layoutlib/gradle.properties b/libs/layoutlib/gradle.properties deleted file mode 100644 index 931d5e82c1..0000000000 --- a/libs/layoutlib/gradle.properties +++ /dev/null @@ -1,4 +0,0 @@ -POM_ARTIFACT_ID=layoutlib-native-jdk11 -POM_NAME=Native LayoutLib for JDK 11 -POM_DESCRIPTION=Android Studio's native layoutlib binary compatible with JDK 11+, packaged for Paparazzi -POM_PACKAGING=jar diff --git a/libs/native-linux/build.gradle b/libs/native-linux/build.gradle deleted file mode 100644 index 1a1f98b271..0000000000 --- a/libs/native-linux/build.gradle +++ /dev/null @@ -1,26 +0,0 @@ -apply plugin: 'com.vanniktech.maven.publish' - -tasks.register('linuxJar', Jar) { - from(repoDir) { - include 'data/linux/**' - include 'data/fonts/**' - include 'data/icu/**' - include 'data/keyboards/**' - exclude '**/BUILD' - } - dependsOn(':libs:layoutlib:cloneLayoutlib') -} - -mavenPublishing { - coordinates(property("GROUP"), property("POM_ARTIFACT_ID"), libs.versions.layoutlib.get()) -} - -publishing { - publications { - mavenNativeLibrary(MavenPublication) { - artifact linuxJar - artifact emptySourcesJar - artifact emptyJavadocJar - } - } -} diff --git a/libs/native-linux/gradle.properties b/libs/native-linux/gradle.properties deleted file mode 100644 index 5d60a3aa66..0000000000 --- a/libs/native-linux/gradle.properties +++ /dev/null @@ -1,4 +0,0 @@ -POM_ARTIFACT_ID=layoutlib-native-linux -POM_NAME=Native Android Runtime for Linux -POM_DESCRIPTION=Android runtime for Linux, fonts, and ICU data, packaged for Paparazzi -POM_PACKAGING=jar diff --git a/libs/native-macarm/build.gradle b/libs/native-macarm/build.gradle deleted file mode 100644 index 93ba7070d1..0000000000 --- a/libs/native-macarm/build.gradle +++ /dev/null @@ -1,26 +0,0 @@ -apply plugin: 'com.vanniktech.maven.publish' - -tasks.register('macArmJar', Jar) { - from(repoDir) { - include 'data/mac-arm/**' - include 'data/fonts/**' - include 'data/icu/**' - include 'data/keyboards/**' - exclude '**/BUILD' - } - dependsOn(':libs:layoutlib:cloneLayoutlib') -} - -mavenPublishing { - coordinates(property("GROUP"), property("POM_ARTIFACT_ID"), libs.versions.layoutlib.get()) -} - -publishing { - publications { - mavenNativeLibrary(MavenPublication) { - artifact macArmJar - artifact emptySourcesJar - artifact emptyJavadocJar - } - } -} diff --git a/libs/native-macarm/gradle.properties b/libs/native-macarm/gradle.properties deleted file mode 100644 index fae5439a4f..0000000000 --- a/libs/native-macarm/gradle.properties +++ /dev/null @@ -1,4 +0,0 @@ -POM_ARTIFACT_ID=layoutlib-native-macarm -POM_NAME=Native Android Runtime for M1 Macs -POM_DESCRIPTION=Android runtime for M1 Macs, fonts, and ICU data, packaged for Paparazzi -POM_PACKAGING=jar diff --git a/libs/native-macosx/build.gradle b/libs/native-macosx/build.gradle deleted file mode 100644 index fde1f3b127..0000000000 --- a/libs/native-macosx/build.gradle +++ /dev/null @@ -1,26 +0,0 @@ -apply plugin: 'com.vanniktech.maven.publish' - -tasks.register('macJar', Jar) { - from(repoDir) { - include 'data/mac/**' - include 'data/fonts/**' - include 'data/icu/**' - include 'data/keyboards/**' - exclude '**/BUILD' - } - dependsOn(':libs:layoutlib:cloneLayoutlib') -} - -mavenPublishing { - coordinates(property("GROUP"), property("POM_ARTIFACT_ID"), libs.versions.layoutlib.get()) -} - -publishing { - publications { - mavenNativeLibrary(MavenPublication) { - artifact macJar - artifact emptySourcesJar - artifact emptyJavadocJar - } - } -} diff --git a/libs/native-macosx/gradle.properties b/libs/native-macosx/gradle.properties deleted file mode 100644 index d8325cf411..0000000000 --- a/libs/native-macosx/gradle.properties +++ /dev/null @@ -1,4 +0,0 @@ -POM_ARTIFACT_ID=layoutlib-native-macosx -POM_NAME=Native Android Runtime for Mac OSX -POM_DESCRIPTION=Android runtime for Mac OSX, fonts, and ICU data, packaged for Paparazzi -POM_PACKAGING=jar diff --git a/libs/native-win/build.gradle b/libs/native-win/build.gradle deleted file mode 100644 index 73e21023c9..0000000000 --- a/libs/native-win/build.gradle +++ /dev/null @@ -1,26 +0,0 @@ -apply plugin: 'com.vanniktech.maven.publish' - -tasks.register('winJar', Jar) { - from(repoDir) { - include 'data/win/**' - include 'data/fonts/**' - include 'data/icu/**' - include 'data/keyboards/**' - exclude '**/BUILD' - } - dependsOn(':libs:layoutlib:cloneLayoutlib') -} - -mavenPublishing { - coordinates(property("GROUP"), property("POM_ARTIFACT_ID"), libs.versions.layoutlib.get()) -} - -publishing { - publications { - mavenNativeLibrary(MavenPublication) { - artifact winJar - artifact emptySourcesJar - artifact emptyJavadocJar - } - } -} diff --git a/libs/native-win/gradle.properties b/libs/native-win/gradle.properties deleted file mode 100644 index c9f4e16fdd..0000000000 --- a/libs/native-win/gradle.properties +++ /dev/null @@ -1,4 +0,0 @@ -POM_ARTIFACT_ID=layoutlib-native-win -POM_NAME=Native Android Runtime for Windows -POM_DESCRIPTION=Android runtime for Windows, fonts, and ICU data, packaged for Paparazzi -POM_PACKAGING=jar diff --git a/paparazzi-gradle-plugin/src/main/java/app/cash/paparazzi/gradle/PaparazziPlugin.kt b/paparazzi-gradle-plugin/src/main/java/app/cash/paparazzi/gradle/PaparazziPlugin.kt index 167bd3c2a2..89a59e5fe0 100644 --- a/paparazzi-gradle-plugin/src/main/java/app/cash/paparazzi/gradle/PaparazziPlugin.kt +++ b/paparazzi-gradle-plugin/src/main/java/app/cash/paparazzi/gradle/PaparazziPlugin.kt @@ -262,7 +262,7 @@ public class PaparazziPlugin : Plugin { val nativeLibraryArtifactId = when { operatingSystem.isMacOsX -> { val osArch = System.getProperty("os.arch").lowercase(Locale.US) - if (osArch.startsWith("x86")) "macosx" else "macarm" + if (osArch.startsWith("x86")) "mac" else "mac-arm" } operatingSystem.isWindows -> "win" else -> "linux" @@ -270,7 +270,7 @@ public class PaparazziPlugin : Plugin { val nativePlatformConfiguration = configurations.create("nativePlatform") nativePlatformConfiguration.dependencies.add( - dependencies.create("app.cash.paparazzi:layoutlib-native-$nativeLibraryArtifactId:$NATIVE_LIB_VERSION") + dependencies.create("com.android.tools.layoutlib:layoutlib-runtime:$NATIVE_LIB_VERSION:$nativeLibraryArtifactId") ) dependencies.registerTransform(UnzipTransform::class.java) { transform -> transform.from.attribute(ARTIFACT_TYPE_ATTRIBUTE, ArtifactTypeDefinition.JAR_TYPE) diff --git a/paparazzi/build.gradle b/paparazzi/build.gradle index 58bc0513a7..2ee4456dff 100644 --- a/paparazzi/build.gradle +++ b/paparazzi/build.gradle @@ -41,9 +41,9 @@ dependencies { implementation libs.bytebuddy.agent implementation libs.bytebuddy.core implementation libs.trove4j - api libs.layoutlib.native.jdk11 api libs.tools.common api libs.tools.layoutlib + api libs.tools.layoutlib.api api libs.tools.ninepatch api libs.tools.sdkCommon api libs.kxml2 @@ -63,14 +63,14 @@ dependencies { if (osName.startsWith("mac")) { def osArch = System.getProperty("os.arch").toLowerCase(Locale.US) if (osArch.startsWith("x86")) { - unzip libs.layoutlib.native.macOsX + unzip variantOf(libs.tools.layoutlib.runtime) { classifier("mac") } } else { - unzip libs.layoutlib.native.macArm + unzip variantOf(libs.tools.layoutlib.runtime) { classifier("mac-arm") } } } else if (osName.startsWith("windows")) { - unzip libs.layoutlib.native.windows + unzip variantOf(libs.tools.layoutlib.runtime) { classifier("win") } } else { - unzip libs.layoutlib.native.linux + unzip variantOf(libs.tools.layoutlib.runtime) { classifier("linux") } } testImplementation libs.truth