Status Update
Comments
al...@google.com <al...@google.com> #2
In AGP, this happens as part of the CreationAction
:
override fun configure(
task: AidlCompile
) {
// ...
task.importDirs = creationConfig.variantDependencies.getArtifactFileCollection(COMPILE_CLASSPATH, ALL, AIDL)
}
But I can't find any way to access that data from outside of AGP. There's variant.compileClasspath
which contains all the JAR files used in compilation, but nothing for the AIDL files. We could pull importDirs
out of the AidlCompile
task using private APIs.
Now, that said, we don't want Stable AIDL files using unstable AIDL files as imports. We could pipe unstable AIDL files between projects using extensions, but that won't work when we have AARs. And AARs don't distinguish between stable and unstable AIDL.
al...@google.com <al...@google.com> #3
Dug around Android Gradle Plugin to see how it produces and consumes intermediate artifacts. This is somewhat simplified, but I think it is still accurate:
Producing intermediate artifacts for Provider<Directory>
:
project.artifacts.add("${variant.name}ApiElements", packagedDir) { artifact ->
artifact.type = "androidx-stable-aidl"
artifact.builtBy(taskProvider)
}
Consuming intermediate artifacts as FileCollection
:
val incoming = project.configurations.findByName("${variant.name}CompileClasspath")?.incoming
val stableAidlFiles = incoming?.artifactView { config ->
config.attributes(Action { container ->
container.attribute(
Attribute.of("artifactType", String::class.java),
"androidx-stable-aidl"
)
})
}?.artifacts?.artifactFiles
al...@google.com <al...@google.com> #4
However, we're still going to have an issue exporting Stable AIDL intermediates to projects that are not using Stable AIDL. Pinned dependencies will be fine, since we publish the files to the AAR (sort of a hack, so maybe this is the same problem), but project dependencies are only looking for android-aidl
artifacts.
Maybe we can publish to android-aidl
and androidx-stable-aidl
?
al...@google.com <al...@google.com> #5
We certainly can.
// Register packaged output for use by AGP's AIDL in other projects.
project.configurations.findByName(targetConfig)?.outgoing?.variants { variants ->
variants.allNamed(ARTIFACT_TYPE_AIDL) { variant ->
variant.artifact(packagedDir) { artifact ->
artifact.type = ARTIFACT_TYPE_AIDL
artifact.builtBy(taskProvider)
}
}
}
ap...@google.com <ap...@google.com> #6
Branch: androidx-main
commit f193de77b36ca339b6b872f1df7f0ce52c29d19f
Author: Alan Viverette <alanv@google.com>
Date: Wed Apr 05 13:52:19 2023
Export stable AIDL definitions to dependent projects
Migrates versionedparcelable, media2-session, and app-automotive to use
Stable AIDL.
Upgrades media2-common to depend on tip-of-tree versionedparcelable so it
can access stable AIDL files.
Relnote: Export stable AIDL definitions to dependent projects
Fixes: 277084531
Test: ./gradlew updateReleaseAidlApi
Change-Id: I473cbc23b15505b8493a00766248fcd1d8a10a96
M car/app/app-automotive/build.gradle
D car/app/app-automotive/src/main/aidl/androidx/car/app/activity/renderer/surface/ISurfaceControl.aidl
M car/app/app-automotive/src/main/stableAidl/androidx/car/app/activity/renderer/ICarAppActivity.aidl
M car/app/app-automotive/src/main/stableAidl/androidx/car/app/activity/renderer/IInsetsListener.aidl
M car/app/app-automotive/src/main/stableAidl/androidx/car/app/activity/renderer/IProxyInputConnection.aidl
M car/app/app-automotive/src/main/stableAidl/androidx/car/app/activity/renderer/IRendererCallback.aidl
M car/app/app-automotive/src/main/stableAidl/androidx/car/app/activity/renderer/IRendererService.aidl
A car/app/app-automotive/src/main/stableAidl/androidx/car/app/activity/renderer/surface/ISurfaceControl.aidl
M car/app/app-automotive/src/main/stableAidl/androidx/car/app/activity/renderer/surface/ISurfaceListener.aidl
A car/app/app-automotive/src/main/stableAidlImports/android/content/ComponentName.aidl
A car/app/app-automotive/src/main/stableAidlImports/android/content/Intent.aidl
A car/app/app-automotive/src/main/stableAidlImports/android/graphics/Insets.aidl
A car/app/app-automotive/src/main/stableAidlImports/android/os/Bundle.aidl
A car/app/app-automotive/src/main/stableAidlImports/android/view/KeyEvent.aidl
A car/app/app-automotive/src/main/stableAidlImports/android/view/MotionEvent.aidl
A car/app/app-automotive/src/main/stableAidlImports/android/view/inputmethod/CompletionInfo.aidl
A car/app/app-automotive/src/main/stableAidlImports/android/view/inputmethod/CorrectionInfo.aidl
A car/app/app-automotive/src/main/stableAidlImports/android/view/inputmethod/EditorInfo.aidl
A car/app/app-automotive/src/main/stableAidlImports/android/view/inputmethod/ExtractedText.aidl
A car/app/app-automotive/src/main/stableAidlImports/android/view/inputmethod/ExtractedTextRequest.aidl
A car/app/app-projected/api/aidlRelease/current/androidx/car/app/hardware/ICarHardwareHost.aidl
A car/app/app-projected/api/aidlRelease/current/androidx/car/app/hardware/ICarHardwareResult.aidl
A car/app/app-projected/api/aidlRelease/current/androidx/car/app/hardware/ICarHardwareResultTypes.aidl
M car/app/app-projected/build.gradle
M car/app/app-projected/src/main/stableAidl/androidx/car/app/hardware/ICarHardwareHost.aidl
M car/app/app-projected/src/main/stableAidl/androidx/car/app/hardware/ICarHardwareResult.aidl
M car/app/app-projected/src/main/stableAidl/androidx/car/app/hardware/ICarHardwareResultTypes.aidl
A car/app/app-projected/src/main/stableAidlImports/android/os/IBinder.aidl
A media2/media2-common/api/aidlRelease/current/androidx/media2/common/ParcelImplListSlice.aidl
M media2/media2-common/build.gradle
D media2/media2-common/src/main/aidl/androidx/media2/common/ParcelImplListSlice.aidl
A media2/media2-common/src/main/stableAidl/androidx/media2/common/ParcelImplListSlice.aidl
A media2/media2-session/api/aidlRelease/current/androidx/media2/session/IMediaController.aidl
A media2/media2-session/api/aidlRelease/current/androidx/media2/session/IMediaSession.aidl
A media2/media2-session/api/aidlRelease/current/androidx/media2/session/IMediaSessionService.aidl
M media2/media2-session/build.gradle
M media2/media2-session/src/main/stableAidl/androidx/media2/session/IMediaController.aidl
M media2/media2-session/src/main/stableAidl/androidx/media2/session/IMediaSession.aidl
M media2/media2-session/src/main/stableAidl/androidx/media2/session/IMediaSessionService.aidl
A media2/media2-session/src/main/stableAidlImports/android/net/Uri.aidl
A media2/media2-session/src/main/stableAidlImports/android/os/Bundle.aidl
A media2/media2-session/src/main/stableAidlImports/android/view/Surface.aidl
M settings.gradle
M stableaidl/stableaidl-gradle-plugin/src/main/java/androidx/stableaidl/StableAidlPlugin.kt
M stableaidl/stableaidl-gradle-plugin/src/main/java/androidx/stableaidl/StableAidlTasks.kt
M stableaidl/stableaidl-gradle-plugin/src/main/java/androidx/stableaidl/tasks/StableAidlCheckApi.kt
M stableaidl/stableaidl-gradle-plugin/src/main/java/androidx/stableaidl/tasks/StableAidlCompile.kt
M stableaidl/stableaidl-gradle-plugin/src/test/java/androidx/stableaidl/tasks/StableAidlCheckApiTest.kt
M stableaidl/stableaidl-gradle-plugin/src/test/java/androidx/stableaidl/tasks/StableAidlCompileTest.kt
A versionedparcelable/versionedparcelable/api/aidlRelease/current/androidx/versionedparcelable/ParcelImpl.aidl
M versionedparcelable/versionedparcelable/build.gradle
D versionedparcelable/versionedparcelable/src/main/aidl/androidx/versionedparcelable/ParcelImpl.aidl
A versionedparcelable/versionedparcelable/src/main/stableAidl/androidx/versionedparcelable/ParcelImpl.aidl
Description