google / play-services-plugins

Plugins to help with using Google Play services SDK.
https://developers.google.com/android/guides/overview
Apache License 2.0
471 stars 138 forks source link

Prevent artifact locations that are directories from being opened as zip files #182

Open JagoGyselinck opened 3 years ago

JagoGyselinck commented 3 years ago

Hi!

This pull request fixes a bug where the oss-licenses-plugin will attempt to create a ZipFile from a directory, resulting in a FileNotFoundException.

Such a situation may occur when:

When this happens, both the transformed dependency and the untransformed dependency will be listed in the dependencies.json file. For example:

Actual dependency

{
        "group": "com.google.android.gms",
        "version": "17.0.0",
        "fileLocation": ".gradle/caches/modules-2/files-2.1/com.google.android.gms/play-services-oss-licenses/17.0.0/4f7cb3..../play-services-oss-licenses-17.0.0.aar",
        "name": "play-services-oss-licenses"
},

Transformed dependency, which is a directory named xyz.aar

{
        "group": "com.google.android.gms",
        "version": "17.0.0",
        "fileLocation": ".gradle/caches/transforms-2/files-2.1/4933ce..../play-services-oss-licenses-17.0.0.aar",
        "name": "play-services-oss-licenses-17.0.0"
},

For the most part, the oss-licenses-plugin seems to handle the directory case well, as it will usually just detect that no POM file is present and ignore it. However, in the case above, isGoogleServices will return true and we'll end up in addGooglePlayServiceLicenses, which tries to open the directory as a zip file.

This pull request makes sure the method just returns when the artifactFile is a directory. License information will still be picked up when the actual artifactFile is processed.

Best Regards, Jago