diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 000000000..fba03d32d --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,202 @@ +# This is a basic workflow to help you get started with Actions + +name: build + +# Controls when the workflow will run +on: + push: + branches: + - master + - ytdl-ci + pull_request: + branches: [master] + + + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + vanilla: + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@v3 + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get install -y autoconf pkg-config libtool ninja-build python3-pip \ + python3-setuptools unzip openssl ca-certificates nasm + sudo pip3 install meson + - name: set up JDK 11 + uses: actions/setup-java@v3 + with: + java-version: '11' + distribution: 'temurin' + cache: gradle + - name: Grant execute permission for gradlew + run: chmod +x gradlew + - name: Setup Android SDK + uses: android-actions/setup-android@v2 + - name: remove old ndk + run: sdkmanager --uninstall "ndk;21.4.7075529" + rm -rf sdkmanager /usr/local/lib/android/sdk/ndk-bundle + - name: Install NDK + run: sdkmanager "ndk;24.0.8215888" + - name: download-deps + working-directory: ./buildscripts + run: | + export mpvarchoverride=armv7l + chmod +x github-prepare.sh + ./github-prepare.sh + - name: build-apk + working-directory: ./buildscripts + run: | + ./buildall.sh -n + - name: relocate apks + run: | + mkdir -p app/build/outputs/apk/release + cp "./app/build/outputs/apk/default/release/app-default-release-unsigned.apk" app/build/outputs/apk/release/mpv-default.apk + cp "./app/build/outputs/apk/api29/release/app-api29-release-unsigned.apk" app/build/outputs/apk/release/mpv-api29.apk + cp "./app/build/outputs/apk/api29/debug/app-api29-debug.apk" app/build/outputs/apk/release/mpv-api29-debug.apk + cp "./app/build/outputs/apk/default/debug/app-default-debug.apk" app/build/outputs/apk/release/mpv-default-debug.apk + - name: Sign APK + uses: r0adkll/sign-android-release@v1 + # ID used to access action output + id: sign_app + with: + releaseDirectory: app/build/outputs/apk/release + signingKeyBase64: ${{ secrets.SIGNING_KEY }} + alias: ${{ secrets.ALIAS }} + keyStorePassword: ${{ secrets.KEY_STORE_PASSWORD }} + # keyPassword: ${{ secrets.KEY_PASSWORD }} + - name : upload APKs + uses: actions/upload-artifact@v2 + with: + name: Vanilla-Build + path: | + app/build/outputs/apk/release/mpv-default-signed.apk + app/build/outputs/apk/release/mpv-api29-signed.apk + app/build/outputs/apk/release/mpv-default-debug-signed.apk + app/build/outputs/apk/release/mpv-api29-debug-signed.apk + + + x86_64: + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@v3 + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get install -y autoconf pkg-config libtool ninja-build python3-pip \ + python3-setuptools unzip openssl ca-certificates nasm + sudo pip3 install meson + - name: set up JDK 11 + uses: actions/setup-java@v3 + with: + java-version: '11' + distribution: 'temurin' + cache: gradle + - name: Grant execute permission for gradlew + run: chmod +x gradlew + - name: Setup Android SDK + uses: android-actions/setup-android@v2 + - name: remove old ndk + run: sdkmanager --uninstall "ndk;21.4.7075529" + rm -rf sdkmanager /usr/local/lib/android/sdk/ndk-bundle + - name: Install NDK + run: sdkmanager "ndk;24.0.8215888" + - name: download-deps + working-directory: ./buildscripts + run: | + export mpvarchoverride=x86_64 + chmod +x github-prepare.sh + ./github-prepare.sh x86_64 + - name: build-apk + working-directory: ./buildscripts + run: | + ./buildall.sh -n + - name: relocate apks + run: | + mkdir -p app/build/outputs/apk/release + cp "./app/build/outputs/apk/default/release/app-default-release-unsigned.apk" app/build/outputs/apk/release/mpv-default.apk + cp "./app/build/outputs/apk/api29/release/app-api29-release-unsigned.apk" app/build/outputs/apk/release/mpv-api29.apk + cp "./app/build/outputs/apk/api29/debug/app-api29-debug.apk" app/build/outputs/apk/release/mpv-api29-debug.apk + cp "./app/build/outputs/apk/default/debug/app-default-debug.apk" app/build/outputs/apk/release/mpv-default-debug.apk + - name: Sign APK + uses: r0adkll/sign-android-release@v1 + # ID used to access action output + id: sign_app + with: + releaseDirectory: app/build/outputs/apk/release + signingKeyBase64: ${{ secrets.SIGNING_KEY }} + alias: ${{ secrets.ALIAS }} + keyStorePassword: ${{ secrets.KEY_STORE_PASSWORD }} + keyPassword: ${{ secrets.KEY_PASSWORD }} + - name : upload APKs + uses: actions/upload-artifact@v2 + with: + name: x86_64-Build + path: | + app/build/outputs/apk/release/mpv-default-signed.apk + app/build/outputs/apk/release/mpv-api29-signed.apk + app/build/outputs/apk/release/mpv-default-debug-signed.apk + app/build/outputs/apk/release/mpv-api29-debug-signed.apk + Arm86: + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@v3 + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get install -y autoconf pkg-config libtool ninja-build python3-pip \ + python3-setuptools unzip openssl ca-certificates nasm + sudo pip3 install meson + - name: set up JDK 11 + uses: actions/setup-java@v3 + with: + java-version: '11' + distribution: 'temurin' + cache: gradle + - name: Grant execute permission for gradlew + run: chmod +x gradlew + - name: Setup Android SDK + uses: android-actions/setup-android@v2 + - name: remove old ndk + run: sdkmanager --uninstall "ndk;21.4.7075529" + rm -rf sdkmanager /usr/local/lib/android/sdk/ndk-bundle + - name: Install NDK + run: sdkmanager "ndk;24.0.8215888" + - name: download-deps + working-directory: ./buildscripts + run: | + export mpvarchoverride=arm64 + chmod +x github-prepare.sh + ./github-prepare.sh arm64 + - name: build-apk + working-directory: ./buildscripts + run: | + ./buildall.sh -n + - name: relocate apks + run: | + mkdir -p app/build/outputs/apk/release + cp "./app/build/outputs/apk/default/release/app-default-release-unsigned.apk" app/build/outputs/apk/release/mpv-default.apk + cp "./app/build/outputs/apk/api29/release/app-api29-release-unsigned.apk" app/build/outputs/apk/release/mpv-api29.apk + cp "./app/build/outputs/apk/api29/debug/app-api29-debug.apk" app/build/outputs/apk/release/mpv-api29-debug.apk + cp "./app/build/outputs/apk/default/debug/app-default-debug.apk" app/build/outputs/apk/release/mpv-default-debug.apk + - name: Sign APK + uses: r0adkll/sign-android-release@v1 + # ID used to access action output + id: sign_app + with: + releaseDirectory: app/build/outputs/apk/release + signingKeyBase64: ${{ secrets.SIGNING_KEY }} + alias: ${{ secrets.ALIAS }} + keyStorePassword: ${{ secrets.KEY_STORE_PASSWORD }} + keyPassword: ${{ secrets.KEY_PASSWORD }} + - name : upload APKs + uses: actions/upload-artifact@v2 + with: + name: Arm-Build + path: | + app/build/outputs/apk/release/mpv-default-signed.apk + app/build/outputs/apk/release/mpv-api29-signed.apk + app/build/outputs/apk/release/mpv-default-debug-signed.apk + app/build/outputs/apk/release/mpv-api29-debug-signed.apk diff --git a/.gitignore b/.gitignore index ae4d27e96..d34101282 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ obj build local.properties *~ +app/src/main/assets/ytdl/python* diff --git a/app/build.gradle b/app/build.gradle index 25b3d6bcc..a8af5cbf0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -6,7 +6,7 @@ android { defaultConfig { minSdkVersion 21 - targetSdkVersion 30 + targetSdkVersion 28 versionCode 28 versionName "2022-03-23-release" vectorDrawables.useSupportLibrary = true @@ -26,6 +26,10 @@ android { buildFeatures { viewBinding = true } + + lintOptions { + disable 'ExpiredTargetSdkVersion' + } } dependencies { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 3da8357be..c733bceaf 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -166,6 +166,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + val choice = setupChoices[item] + dialog.dismiss() + runProcess("Setting up $choice:", mutableListOf("ytdl/wrapper", "setup.py", choice)) + } + show() + } + } + binding.updateBtn.setOnClickListener { + runProcess("Running youtube-dl --update:", mutableListOf("youtube-dl", "--update")) + } + binding.updateBtn.isEnabled = File("${context.filesDir.path}/youtube-dl").exists() + } + + private fun runProcess(initText: String, command: MutableList) + { + if (proc != null) + return + + var text = initText + "\n" + binding.info.text = text + + command[0] = "${context.filesDir.path}/${command[0]}" + try { + with (ProcessBuilder(command)) { + redirectErrorStream(true) + proc = start() + } + } catch (e: Exception) { + text += e.message + binding.info.text = text + return + } + + thread { + val buf = ByteArray(1024) + try { + do { + val n = proc!!.inputStream.read(buf) + if (n > 0) { + text += String(buf.copyOfRange(0, n)) + binding.info.post { binding.info.text = text } + } + } while (n != -1) + } catch (e: IOException) {} + proc = null + } + } + + override fun onDialogClosed(positiveResult: Boolean) { + super.onDialogClosed(positiveResult) + proc?.destroy() + } + + companion object { + private val setupChoices = arrayOf("youtube-dl", "yt-dlp") + } +} diff --git a/app/src/main/jni/Android.mk b/app/src/main/jni/Android.mk index 102dd35e0..f71dd65ba 100644 --- a/app/src/main/jni/Android.mk +++ b/app/src/main/jni/Android.mk @@ -1,5 +1,7 @@ LOCAL_PATH:= $(call my-dir) - +ifeq ($(TARGET_ARCH_ABI),armeabi-v7a) +PREFIX = $(PREFIX32) +endif ifeq ($(TARGET_ARCH_ABI),arm64-v8a) PREFIX = $(PREFIX64) endif diff --git a/app/src/main/jni/Application.mk b/app/src/main/jni/Application.mk index fa5b0e51b..fcfa92c9d 100644 --- a/app/src/main/jni/Application.mk +++ b/app/src/main/jni/Application.mk @@ -1,4 +1,6 @@ +ifneq ($(PREFIX32),) APP_ABI := armeabi-v7a +endif ifneq ($(PREFIX64),) APP_ABI += arm64-v8a endif diff --git a/app/src/main/res/layout/ytdl_format_pref.xml b/app/src/main/res/layout/ytdl_format_pref.xml new file mode 100644 index 000000000..edca76f00 --- /dev/null +++ b/app/src/main/res/layout/ytdl_format_pref.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/ytdl_update_pref.xml b/app/src/main/res/layout/ytdl_update_pref.xml new file mode 100644 index 000000000..1ab423731 --- /dev/null +++ b/app/src/main/res/layout/ytdl_update_pref.xml @@ -0,0 +1,43 @@ + + + + + +