Skip to content

Commit

Permalink
Revert "update layoutlib to 31.4.0-alpha03 and 14.0.1 published by Go…
Browse files Browse the repository at this point in the history
…ogle"

This reverts commit 28ee920.
  • Loading branch information
gabrielittner committed Feb 18, 2024
1 parent 1263648 commit bab387f
Show file tree
Hide file tree
Showing 15 changed files with 256 additions and 11 deletions.
13 changes: 9 additions & 4 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@ moshi = "1.15.1"
minSdk = "25"
compileSdk = "34"

layoutlib = "14.0.1"
# Maps to this commit: https://android.googlesource.com/platform/prebuilts/studio/layoutlib/+/6c7316c
layoutlib = "2023.2.1-rc1-6c7316c"
layoutlibPrebuiltSha = "6c7316c"

[libraries]
androidx-annotations = { module = "androidx.annotation:annotation", version = "1.7.1" }
Expand Down Expand Up @@ -43,6 +45,11 @@ 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" }
Expand All @@ -51,9 +58,7 @@ 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-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-layoutlib = { module = "com.android.tools.layoutlib:layoutlib-api", version = "31.3.0-rc01" }
tools-ninepatch = { module = "com.android.tools:ninepatch", version.ref = "androidTools" }
tools-sdkCommon = { module = "com.android.tools:sdk-common", version.ref = "androidTools" }

Expand Down
54 changes: 54 additions & 0 deletions libs/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
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
1 change: 1 addition & 0 deletions libs/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
ext.repoDir = rootProject.layout.buildDirectory.dir("prebuilts/studio/layoutlib").get().asFile
61 changes: 61 additions & 0 deletions libs/layoutlib/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
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
}
}
}
4 changes: 4 additions & 0 deletions libs/layoutlib/gradle.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
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
26 changes: 26 additions & 0 deletions libs/native-linux/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
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
}
}
}
4 changes: 4 additions & 0 deletions libs/native-linux/gradle.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
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
26 changes: 26 additions & 0 deletions libs/native-macarm/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
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
}
}
}
4 changes: 4 additions & 0 deletions libs/native-macarm/gradle.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
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
26 changes: 26 additions & 0 deletions libs/native-macosx/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
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
}
}
}
4 changes: 4 additions & 0 deletions libs/native-macosx/gradle.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
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
26 changes: 26 additions & 0 deletions libs/native-win/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
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
}
}
}
4 changes: 4 additions & 0 deletions libs/native-win/gradle.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
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
Original file line number Diff line number Diff line change
Expand Up @@ -256,15 +256,15 @@ public class PaparazziPlugin : Plugin<Project> {
val nativeLibraryArtifactId = when {
operatingSystem.isMacOsX -> {
val osArch = System.getProperty("os.arch").lowercase(Locale.US)
if (osArch.startsWith("x86")) "mac" else "mac-arm"
if (osArch.startsWith("x86")) "macosx" else "macarm"
}
operatingSystem.isWindows -> "win"
else -> "linux"
}

val nativePlatformConfiguration = configurations.create("nativePlatform")
nativePlatformConfiguration.dependencies.add(
dependencies.create("com.android.tools.layoutlib:layoutlib-runtime:$NATIVE_LIB_VERSION:$nativeLibraryArtifactId")
dependencies.create("app.cash.paparazzi:layoutlib-native-$nativeLibraryArtifactId:$NATIVE_LIB_VERSION")
)
dependencies.registerTransform(UnzipTransform::class.java) { transform ->
transform.from.attribute(ARTIFACT_TYPE_ATTRIBUTE, ArtifactTypeDefinition.JAR_TYPE)
Expand Down
10 changes: 5 additions & 5 deletions paparazzi/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -63,14 +63,14 @@ dependencies {
if (osName.startsWith("mac")) {
def osArch = System.getProperty("os.arch").toLowerCase(Locale.US)
if (osArch.startsWith("x86")) {
unzip variantOf(libs.tools.layoutlib.runtime) { classifier("mac") }
unzip libs.layoutlib.native.macOsX
} else {
unzip variantOf(libs.tools.layoutlib.runtime) { classifier("mac-arm") }
unzip libs.layoutlib.native.macArm
}
} else if (osName.startsWith("windows")) {
unzip variantOf(libs.tools.layoutlib.runtime) { classifier("win") }
unzip libs.layoutlib.native.windows
} else {
unzip variantOf(libs.tools.layoutlib.runtime) { classifier("linux") }
unzip libs.layoutlib.native.linux
}

testImplementation libs.truth
Expand Down

0 comments on commit bab387f

Please sign in to comment.