bazelbuild / rules_android

Android rules for Bazel
Apache License 2.0
179 stars 44 forks source link

Rules use entire Android SDK dir as input instead of explicit files which may case poor cache hit #247

Open nkoroste opened 3 months ago

nkoroste commented 3 months ago

This is not super common but we've noticed that if someone has extra files in their androidsdk/build-tools/34.0.0/lib/* they will be used an input files to an action which will cause a cache miss and therefore a local rebuild.

Example of unwanted input because a rogue dx.jar file was present :

     "path": "bazel-out/arm64-v8a-fastbuild-android-ST-5084ec102eb5/bin/external/androidsdk/aapt2_binary.runfiles/__main__/external/androidsdk/build-tools/34.0.0/lib/dx.jar",
      "digest": {
        "hash": "5f37023cdab507f4f2ece1c80dabd056254e30cc9f4aef39dd84c4e0a0031615",
        "sizeBytes": "1038021",
        "hashFunctionName": "SHA-256"
      },
      "isTool": false,
      "symlinkTargetPath": ""
    }, {

and

      "path": "bazel-out/arm64-v8a-fastbuild-android-ST-5084ec102eb5/bin/external/androidsdk/aapt2_binary.runfiles/androidsdk/build-tools/34.0.0/lib/dx.jar",
      "digest": {
        "hash": "5f37023cdab507f4f2ece1c80dabd056254e30cc9f4aef39dd84c4e0a0031615",
        "sizeBytes": "1038021",
        "hashFunctionName": "SHA-256"
      },
      "isTool": false,
      "symlinkTargetPath": ""
    }, {
ahumesky commented 3 months ago

This is from the glob here: https://github.com/bazelbuild/rules_android/blob/58e93e5d0958d7fe06efaf8565e0d8f153a92fd7/rules/android_sdk_repository/helper.bzl#L282

This is all very imprecise: https://github.com/bazelbuild/rules_android/blob/main/rules/android_sdk_repository/helper.bzl#L279-L315 I don't think any of those tools (aapt2 etc) need anything in lib because lib just had d8.jar and apksigner.jar