From 73f28d482937c83409410abe9b8ff33a18a5424f Mon Sep 17 00:00:00 2001 From: ibaker Date: Tue, 18 May 2021 16:16:23 +0100 Subject: [PATCH] Fix `core_settings.gradle` to not assume `exoplayerRoot` is absolute Gradle warns against passing a relative path to `new File(String)`: https://docs.gradle.org/current/userguide/working_with_files.html#sec:single_file_paths This change fixes all usages of `exoplayerRoot` to pass it to Gradle's `Project.file()` first, which returns an absolute `File`. To reproduce the problem in Issue: #8927: 1. Checkout ExoPlayer git project, to e.g. `~/ExoPlayer/exoplayer-git` 2. Create a new Android Studio project in e.g. `~/AndroidStudioProjects/exoplayer-test` 3. Edit the new project's `settings.gradle` file as described in https://github.com/google/ExoPlayer/blob/release-v2/README.md using a relative path for `exoplayerRoot`: ``` gradle.ext.exoplayerRoot = '../../ExoPlayer/exoplayer-git' ``` 4. In a shell: ```bash $ cd ~/AndroidStudioProjects/exoplayer-test/app $ ../gradlew build ``` (Step 4 is important, it seems running `./gradlew` from the project root doesn't trigger the relative path problem) This change fixes the problem, and also works with `exoplayerRoot` as a `File` or `Path` object. `String`, `File` and `Path` all work with relative or absolute paths: ``` gradle.ext.exoplayerRoot = '/home/ibaker/ExoPlayer/exoplayer-git' gradle.ext.exoplayerRoot = '../../ExoPlayer/exoplayer-git' gradle.ext.exoplayerRoot = new File('/home/ibaker/ExoPlayer/exoplayer-git') gradle.ext.exoplayerRoot = new File('../../ExoPlayer/exoplayer-git') gradle.ext.exoplayerRoot = Paths.get('/home/ibaker/ExoPlayer/exoplayer-git') gradle.ext.exoplayerRoot = Paths.get('../../ExoPlayer/exoplayer-git') ``` Note: The Path versions above require importing `java.nio.file.Paths` and changing the `apply from:` line in the project's settings.gradle file to something like: ``` apply from: file(gradle.ext.exoplayerRoot.resolve('core_settings.gradle')) ``` It's assumed that a project wanting to pass a `Path` will make these changes. Issue: #8927 PiperOrigin-RevId: 374421627 --- README.md | 6 +++--- RELEASENOTES.md | 7 ++++++- core_settings.gradle | 5 ++--- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 856f961ae9..80d0a6c71e 100644 --- a/README.md +++ b/README.md @@ -104,12 +104,12 @@ git checkout release-v2 ``` Next, add the following to your project's `settings.gradle` file, replacing -`/absolute/path/to/exoplayer` with the absolute path to your local copy: +`path/to/exoplayer` with the path to your local copy: ```gradle -gradle.ext.exoplayerRoot = '/absolute/path/to/exoplayer' +gradle.ext.exoplayerRoot = 'path/to/exoplayer' gradle.ext.exoplayerModulePrefix = 'exoplayer-' -apply from: new File(gradle.ext.exoplayerRoot, 'core_settings.gradle') +apply from: file("$gradle.ext.exoplayerRoot/core_settings.gradle") ``` You should now see the ExoPlayer modules appear as part of your project. You can diff --git a/RELEASENOTES.md b/RELEASENOTES.md index aa78aafce4..637208f71b 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -2,6 +2,10 @@ ### dev-v2 (not yet released) +* Core Library: + * Fix gradle config to allow specifying a relative path for + `exoplayerRoot` when [depending on ExoPlayer locally](README.md#locally) + ([#8927](https://github.com/google/ExoPlayer/issues/8927)). * Extractors: * Add support for MPEG-H 3D Audio in MP4 extractors ([#8860](https://github.com/google/ExoPlayer/pull/8860)). @@ -49,7 +53,8 @@ * Use the PRECISE attribute in EXT-X-START to select the default start position. * PlayerNotificationManager: - * Add `PendingIntent.FLAG_IMMUTABLE` flag to BroadcastReceiver to support Android 12. + * Add `PendingIntent.FLAG_IMMUTABLE` flag to BroadcastReceiver to support + Android 12. ### 2.14.0 (2021-05-13) diff --git a/core_settings.gradle b/core_settings.gradle index c0c19abf80..8d262c89dc 100644 --- a/core_settings.gradle +++ b/core_settings.gradle @@ -11,10 +11,9 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -def rootDir = gradle.ext.exoplayerRoot +def rootDir = file(gradle.ext.exoplayerRoot) if (!gradle.ext.has('exoplayerSettingsDir')) { - gradle.ext.exoplayerSettingsDir = - new File(rootDir.toString()).getCanonicalPath() + gradle.ext.exoplayerSettingsDir = rootDir.getCanonicalPath() } def modulePrefix = ':' if (gradle.ext.has('exoplayerModulePrefix')) {