blob: 0327d7f0af6001cf1e7549ef2efce9ebe09a9107 [file] [log] [blame] [view] [edit]
# Notes on patches
To make Bazel's use of the official Android manifest merger tool consistent with
the [`tools:targetApi`
attribute.](https://developer.android.com/studio/write/tool-attributes#toolstargetapi),
`com.android.tools.build_manifest-merger_25.0.0-patched.jar` contains a patched
`OtherOperationType.class`. The patched class is generated by compiling
`build-system/manifest-merger/src/main/java/com/android/manifmerger/OtherOperationType.java`
from commit 8fff824b40 in
[studio-master-dev](https://android.googlesource.com/platform/tools/base/+/master/build-system/manifest-merger/src/main/java/com/android/manifmerger)
with the following patch:
```diff
diff --git a/build-system/manifest-merger/src/main/java/com/android/manifmerger/OtherOperationType.java b/build-system/manifest-merger/src/main/java/com/android/manifmerger/OtherOperationType.java
index d0ca70b544..095a781f56 100644
--- a/build-system/manifest-merger/src/main/java/com/android/manifmerger/OtherOperationType.java
+++ b/build-system/manifest-merger/src/main/java/com/android/manifmerger/OtherOperationType.java
@@ -26,5 +26,5 @@ public enum OtherOperationType {
ignore,
// used to direct lint
- targetAPI
+ targetApi,
}
```
Commit 8fff824b40 was chosen as it was the latest commit before the release of the `manifest-merger:25.0.0` artifact.
For more information, see <https://github.com/bazelbuild/bazel/issues/6645>.
--
To avoid using symbols which were removed in modern Guava versions,
`com.android.tools_sdk-common_25.0.0-patched.jar` contains several patched
classes. Steps to create the patched jar:
1. `git clone https://android.googlesource.com/platform/tools/base`
2. `git checkout 3882fb8c9281a33c56377f20e865c8a858ee50d9`
This commit corresponds to the `studio-2.0` tag, which corresponds to the
`sdk-common:25.0.0` artifact (apparently undocumented, but determined by
diffing against the sources.jar).
3. `git am $BAZEL/third_party/android_common/sdk-common-guava.patch`
This fixes the use of symbols removed in modern Guava versions
(`CharMatcher.JAVA_LETTER`, `Objects.firstNonNull`, and
`Objects.toStringHelper`).
4. `git am $BAZEL/third_party/android_common/sdk-common-maven.patch`
This adds a usable pom.xml to allow rebuilding `sdk-common` using Maven
(instead of Gradle with a specific version of the `sdk-java-lib` plugin,
which is not easy to use/obtain) and fixes a build failure with modern JDKs.
5. `mvn compile`
6. ```shell
curl -L -o sdk-common-25.0.0-patched.jar \
https://repo1.maven.org/maven2/com/android/tools/sdk-common/25.0.0/sdk-common-25.0.0.jar
```
7. ```shell
cd target/classes && \
jar ufv ../../sdk-common-25.0.0-patched.jar \
com/android/ide/common/res2/DataSet*.class \
com/android/ide/common/res2/MergeConsumer*.class \
com/android/ide/common/res2/MergingException*.class \
com/android/ide/common/res2/ResourceFile*.class \
com/android/ide/common/res2/ResourceSet*.class \
com/android/ide/common/resources/configuration/LocaleQualifier.class
```
--
The following jars contain the same contents as their versions without
-stripped, except that we removed some classes from them.
* com.android.tools.layoutlib_layoutlib_26.1.2-stripped.jar
* com.android.tools_sdk-common_25.0.0-patched-stripped.jar
Classes removed:
com/android/ide/common/util/AssetUtil.class
com/android/ide/common/util/AssetUtil$FillEffect.class
com/android/ide/common/util/AssetUtil$ShadowEffect.class
com/android/ide/common/rendering/LayoutLibrary.class
com/android/ide/common/rendering/api/IImageFactory.class
com/android/ide/common/rendering/api/RenderSession.class
com/android/ide/common/rendering/StaticRenderSession.class
com/android/ide/common/vectordrawable/VdElement.class
com/android/ide/common/vectordrawable/EllipseSolver.class
com/android/ide/common/vectordrawable/SvgTree.class
com/android/ide/common/vectordrawable/SvgGroupNode.class
com/android/ide/common/vectordrawable/VdPath.class
com/android/ide/common/vectordrawable/VdPath$Node.class
com/android/ide/common/vectordrawable/SvgNode.class
com/android/ide/common/vectordrawable/VdPreview.class
com/android/ide/common/vectordrawable/SvgLeafNode.class
com/android/ide/common/vectordrawable/VdTree.class
com/android/ide/common/vectordrawable/VdNodeRender.class
com/android/ide/common/vectordrawable/VdIcon.class
com/android/ide/common/vectordrawable/VdGroup.class
These are unused in the bazel code base (transitively) and were the last
remaining bits on the java.desktop dependency.