# Copyright (C) Contributors to the Suwayomi project # # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at https://mozilla.org/MPL/2.0/. # This is a windows only PowerShell script to create android.jar stubs # foolproof against running from AndroidCompat dir instead of running from project root if ($(Split-Path -Path (Get-Location) -Leaf) -eq "AndroidCompat" ) { Set-Location .. } Write-Output "Getting required Android.jar..." Remove-Item -Recurse -Force "tmp" -ErrorAction SilentlyContinue | Out-Null New-Item -ItemType Directory -Force -Path "tmp" | Out-Null $androidEncoded = (Invoke-WebRequest -Uri "https://android.googlesource.com/platform/prebuilts/sdk/+/6cd31be5e4e25901aadf838120d71a79b46d9add/30/public/android.jar?format=TEXT" -UseBasicParsing).content $android_jar = (Get-Location).Path + "\tmp\android.jar" [IO.File]::WriteAllBytes($android_jar, [Convert]::FromBase64String($androidEncoded)) # We need to remove any stub classes that we have implementations for Write-Output "Patching JAR..." function Remove-Files-Zip($zipfile, $paths) { [Reflection.Assembly]::LoadWithPartialName('System.IO.Compression') | Out-Null $stream = New-Object IO.FileStream($zipfile, [IO.FileMode]::Open) $mode = [IO.Compression.ZipArchiveMode]::Update $zip = New-Object IO.Compression.ZipArchive($stream, $mode) if ($paths.getType().Name -eq "Object[]") { $paths | ForEach-Object { $path = $_ ($zip.Entries | Where-Object { $_.FullName -like $path }) | ForEach-Object { Write-Output "Deleting: $($_.FullName)"; $_.Delete() } } } else { ($zip.Entries | Where-Object { $_.FullName -like $paths }) | ForEach-Object { Write-Output "Deleting: $($_.FullName)"; $_.Delete() } } $zip.Dispose() $stream.Close() $stream.Dispose() } Write-Output "Removing org.json..." Remove-Files-Zip $android_jar 'org/json/*' Write-Output "Removing org.apache..." Remove-Files-Zip $android_jar 'org/apache/*' Write-Output "Removing org.w3c..." Remove-Files-Zip $android_jar 'org/w3c/*' Write-Output "Removing org.xml..." Remove-Files-Zip $android_jar 'org/xml/*' Write-Output "Removing org.xmlpull..." Remove-Files-Zip $android_jar 'org/xmlpull/*' Write-Output "Removing junit..." Remove-Files-Zip $android_jar 'junit/*' Write-Output "Removing javax..." Remove-Files-Zip $android_jar 'javax/*' Write-Output "Removing java..." Remove-Files-Zip $android_jar 'java/*' Write-Output "Removing overriden classes..." Remove-Files-Zip $android_jar 'android/app/Application.class' Remove-Files-Zip $android_jar 'android/app/Service.class' Remove-Files-Zip $android_jar 'android/net/Uri.class' Remove-Files-Zip $android_jar 'android/net/Uri$Builder.class' Remove-Files-Zip $android_jar 'android/os/Environment.class' Remove-Files-Zip $android_jar 'android/text/format/Formatter.class' Remove-Files-Zip $android_jar 'android/text/Html.class' function Dedupe($path) { Push-Location $path $classes = Get-ChildItem . *.* -Recurse | Where-Object { !$_.PSIsContainer } $classes | ForEach-Object { "Processing class: $($_.FullName)" Remove-Files-Zip $android_jar ("$($_.Name).class","$($_.Name)$*.class","$($_.Name)Kt.class","$($_.Name)Kt$*.class") | Out-Null } Pop-Location } Dedupe "AndroidCompat/src/main/java" Dedupe "server/src/main/kotlin" Write-Output "Copying Android.jar to library folder..." Move-Item -Force $android_jar "AndroidCompat/lib/android.jar" Write-Output "Cleaning up..." Remove-Item -Recurse -Force "tmp" Write-Output "Done!"