diff --git a/buildSrc/src/main/kotlin/custom/Auth.kt b/buildSrc/src/main/kotlin/custom/Auth.kt index 150258098..0a1b62d9f 100644 --- a/buildSrc/src/main/kotlin/custom/Auth.kt +++ b/buildSrc/src/main/kotlin/custom/Auth.kt @@ -16,7 +16,6 @@ package custom -import com.android.build.gradle.api.ApkVariantOutput import com.google.api.client.googleapis.auth.oauth2.GoogleCredential import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport import com.google.api.client.http.FileContent @@ -33,7 +32,6 @@ import java.io.File import java.io.FileInputStream import java.security.KeyStore -@Suppress("DEPRECATION") fun createPublisher(auth: File): AndroidPublisher { val transport = buildTransport() val factory = JacksonFactory.getDefaultInstance() @@ -81,34 +79,31 @@ class Transaction( FileContent("application/octet-stream", file) ).execute().prettyPrint() - @Suppress("DEPRECATION") - fun attachExpansionTo(expansionCode: Int, apkVariantOutput: ApkVariantOutput): ExpansionFile = + fun attachExpansionTo(versionCode: Int): ExpansionFile = publisher.edits().expansionfiles().update( packageName, editId, - apkVariantOutput.versionCodeOverride, + versionCode, "main", - ExpansionFile().apply { referencesVersion = expansionCode } + ExpansionFile().apply { referencesVersion = versionCode } ).execute().prettyPrint() - @Suppress("DEPRECATION") - fun uploadApk(apkVariantOutput: ApkVariantOutput) { - publisher.edits().apks().upload( + fun uploadBundle(outputFile: File) { + publisher.edits().bundles().upload( packageName, editId, - FileContent("application/octet-stream", apkVariantOutput.outputFile) + FileContent("application/octet-stream", outputFile) ).execute().prettyPrint() } - @Suppress("DEPRECATION") - fun addToTrackInDraft(apkVariants: List): Track = - publisher.edits().tracks().update(packageName, editId, "internal", Track().apply { + fun addToTrackInDraft(versionCode: Int, versionName: String?): Track = + publisher.edits().tracks().update(packageName, editId, "alpha", Track().apply { releases = listOf(TrackRelease().apply { status = "draft" - name = apkVariants[0].versionNameOverride - versionCodes = apkVariants.map { it.versionCodeOverride.toLong() } + name = versionName + versionCodes = listOf(versionCode.toLong()) }) - track = "internal" + track = "alpha" }).execute().prettyPrint() } diff --git a/core/src/main/res/values-b+be+tarask+old/strings.xml b/core/src/main/res/values-b+be+tarask+old/strings.xml index f7b21eb9f..fcabbf29b 100644 --- a/core/src/main/res/values-b+be+tarask+old/strings.xml +++ b/core/src/main/res/values-b+be+tarask+old/strings.xml @@ -19,12 +19,15 @@ Захаваць мэдыя Узьнікла памылка пры захаваньні мэдыяфайлу! Мэдыя-файл захаваны як %s у Downloads/org.kiwix…/ + Пошук Абярыце файл зьместу (*.zim) Адкрыць спасылку ў новай укладцы? + Сэрвісны канал пункту досягу Падобна, што ваш пункт доступу ўжо ўключаны. Каб працягнуць, адключыце пункт доступу вай-фай. Перайсьці да наладаў вай-фаю Немагчыма запусьціць сэрвэр. Калі ласка, уключыце ваш пункт доступу Немагчыма запусьціць сэрвэр. + Дэталі вашага лякальнага пункту досягу. \nSSID: %1$s \nСпокліч: %2$s Памылка: абраны ZIM-файл ня знойдзены. Памылка: абраны файл не зьяўляецца слушным ZIM-файлам. Памылка: загрузка артыкула (Url: %1$s) не атрымалася. @@ -36,7 +39,9 @@ Паказваць кнопку ў канцы старонкі для пракручваньня ўверх Мова Абярыце мову - Мова гэтай старонкі не падтрымліваецца або адпаведныя зьвесткі мовы не былі ўсталяваныя. Артыкул можа быць няправільна прачытаны. + Удзельнікі й ліцэнзіі + Стваральнікі + Мова гэтай старонкі не падтрымліваецца. Артыкул можа быць няправільна прачытаны. Ня знойдзеныя ўсталяваныя праграмы для гэтага тыпу файлу Ня знойдзеныя загалоўкі зьместу Каб атрымаць доступ да зьместу оф-лайн, нам трэба мець доступ да вашага сховішча @@ -44,10 +49,16 @@ Выдаліць гэты элемэнт? Уся гісторыя ачышчаная Ачысьціць усю гісторыю? + Падзяліцца файламі ZIM з: Выдаліць + Скасаваць Нядаўні пошук выдалены + Каб убачыць зьмест артыкулу, можаце прагарнуць улева Зразумела Ці ведалі вы? + Скасаваць + Закладка закрытая + Закладкі закрытыя Закладка дададзеная Калі ласка, ацаніце нас Ацаніць! @@ -57,12 +68,21 @@ Адкрыць новую ўкладку на фоне Пры адкрыцьці новай укладкі, яна будзе адкрытая на заднім пляне Дадаткова + Пошук у Kiwix Прылада + Анляйн + Бібліятэка Што робіць Kiwix? + Хоць Kiwix першапачаткова быў распрацаваны для афляйнавай падтрымкі Вікіпэдыі, але можа чытаць іншыя віды зьместу. Дзе зьмест? Выбачайце, мы не змаглі выдаліць некаторыя файлы. Паспрабуйце скарыстацца файлавым кіраўніком. Спыніць загрузку? Вы ўпэўненыя, што хочаце спыніць гэтую загрузку? + Няўдалая спроба ініцыялізацыі Тэксту-ў-Размову. Калі ласка, паспрабуйце яшчэ раз + засталося + Сёньня + Учора + Папярэджваць падчас уводу вонкавых спасылак Вы ўводзіце вонкавую спасылку. Гэта можа прывесьці да зьняцьця грошай мабільным апэратарам ці проста не спрацаваць, калі вы знаходзіцеся ў офлайне. Хочаце працягнуць? Болей не пытаць Выбраныя мовы: diff --git a/core/src/main/res/values-b+be+tarask/strings.xml b/core/src/main/res/values-b+be+tarask/strings.xml deleted file mode 100644 index fcabbf29b..000000000 --- a/core/src/main/res/values-b+be+tarask/strings.xml +++ /dev/null @@ -1,108 +0,0 @@ - - - - Дапамога - Галоўная - Налады - Знайсьці на старонцы - Закладкі - Выпадковы артыкул - На ўвесь экран - Выйсьці з рэжыму поўнага экрану - Чытаць уголас - Спыніць чытаньне ўголас - Падтрымаць Kiwix - Пункт доступу WiFi - Захаваць мэдыя - Узьнікла памылка пры захаваньні мэдыяфайлу! - Мэдыя-файл захаваны як %s у Downloads/org.kiwix…/ - Пошук - Абярыце файл зьместу (*.zim) - Адкрыць спасылку ў новай укладцы? - Сэрвісны канал пункту досягу - Падобна, што ваш пункт доступу ўжо ўключаны. Каб працягнуць, адключыце пункт доступу вай-фай. - Перайсьці да наладаў вай-фаю - Немагчыма запусьціць сэрвэр. Калі ласка, уключыце ваш пункт доступу - Немагчыма запусьціць сэрвэр. - Дэталі вашага лякальнага пункту досягу. \nSSID: %1$s \nСпокліч: %2$s - Памылка: абраны ZIM-файл ня знойдзены. - Памылка: абраны файл не зьяўляецца слушным ZIM-файлам. - Памылка: загрузка артыкула (Url: %1$s) не атрымалася. - Інфармацыя - Вэрсія - Начны рэжым - Паказваць артыкулы ў інвэртаваных колерах - Вярнуцца ўгару - Паказваць кнопку ў канцы старонкі для пракручваньня ўверх - Мова - Абярыце мову - Удзельнікі й ліцэнзіі - Стваральнікі - Мова гэтай старонкі не падтрымліваецца. Артыкул можа быць няправільна прачытаны. - Ня знойдзеныя ўсталяваныя праграмы для гэтага тыпу файлу - Ня знойдзеныя загалоўкі зьместу - Каб атрымаць доступ да зьместу оф-лайн, нам трэба мець доступ да вашага сховішча - Вы сапраўды хочаце выдаліць гісторыю пошуку і скінуць усе актыўныя закладкі? - Выдаліць гэты элемэнт? - Уся гісторыя ачышчаная - Ачысьціць усю гісторыю? - Падзяліцца файламі ZIM з: - Выдаліць - Скасаваць - Нядаўні пошук выдалены - Каб убачыць зьмест артыкулу, можаце прагарнуць улева - Зразумела - Ці ведалі вы? - Скасаваць - Закладка закрытая - Закладкі закрытыя - Закладка дададзеная - Калі ласка, ацаніце нас - Ацаніць! - Не, дзякуй - Пазьней - Закладка выдаленая - Адкрыць новую ўкладку на фоне - Пры адкрыцьці новай укладкі, яна будзе адкрытая на заднім пляне - Дадаткова - Пошук у Kiwix - Прылада - Анляйн - Бібліятэка - Што робіць Kiwix? - Хоць Kiwix першапачаткова быў распрацаваны для афляйнавай падтрымкі Вікіпэдыі, але можа чытаць іншыя віды зьместу. - Дзе зьмест? - Выбачайце, мы не змаглі выдаліць некаторыя файлы. Паспрабуйце скарыстацца файлавым кіраўніком. - Спыніць загрузку? - Вы ўпэўненыя, што хочаце спыніць гэтую загрузку? - Няўдалая спроба ініцыялізацыі Тэксту-ў-Размову. Калі ласка, паспрабуйце яшчэ раз - засталося - Сёньня - Учора - Папярэджваць падчас уводу вонкавых спасылак - Вы ўводзіце вонкавую спасылку. Гэта можа прывесьці да зьняцьця грошай мабільным апэратарам ці проста не спрацаваць, калі вы знаходзіцеся ў офлайне. Хочаце працягнуць? - Болей не пытаць - Выбраныя мовы: - Іншыя мовы: - Падобна, што мы паламаліся.\n\nЦі можаце дапамагчы нам выправіць гэтую праблему, адаслаўшы наступную інфармацыю? - Вашыя моўныя налады - Сьпіс вашых zim-файлаў - Падрабязнасьці аварыі - Журналы праграмы - Падрабязнасьці прылады - Скарот недаступны - Новая ўкладка - Атрымаць зьмест - Любімая іконка - %s артыкулаў - Пачаць - Скачвайце кнігі - Веды чалавецтва ў вашым тэлефоне. - Вітаем у сям’і - Нататкамі нельга карыстацца бяз доступу да сховішча - Android вымагае лякальнага дазволу на доступ праграмы да вызначэньня прыладаў - Няма закладак - diff --git a/custom/build.gradle.kts b/custom/build.gradle.kts index 037471284..6ea89670c 100644 --- a/custom/build.gradle.kts +++ b/custom/build.gradle.kts @@ -9,6 +9,7 @@ import java.net.URI import java.net.URLDecoder import java.util.Locale import java.util.Base64 +import java.io.FileNotFoundException import java.io.FileOutputStream import okhttp3.OkHttpClient import okhttp3.Request @@ -31,7 +32,7 @@ android { all { File("$projectDir/src", "$name/$name.zim").let { createDownloadTask(it) - createPublishApkWithExpansionTask(it, applicationVariants) + createPublishBundleWithExpansionTask(it, applicationVariants) } } } @@ -119,13 +120,13 @@ val String.removeAuthenticationFromUrl: String get() = decodeUrl.trim() .replace(Regex("\\{\\{\\s*[^}]+\\s*\\}\\}@"), "") -fun ProductFlavor.createPublishApkWithExpansionTask( +fun ProductFlavor.createPublishBundleWithExpansionTask( file: File, applicationVariants: DomainObjectSet ): Task { val capitalizedName = name.replaceFirstChar { if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else "$it" } - return tasks.create("publish${capitalizedName}ReleaseApkWithExpansionFile") { + return tasks.create("publish${capitalizedName}ReleaseBundleWithExpansionFile") { group = "publishing" description = "Uploads $capitalizedName to the Play Console with an Expansion file" doLast { @@ -134,11 +135,20 @@ fun ProductFlavor.createPublishApkWithExpansionTask( createPublisher(File(rootDir, "playstore.json")) .transactionWithCommit(packageName) { val variants = - applicationVariants.releaseVariantsFor(this@createPublishApkWithExpansionTask) - variants.forEach(::uploadApk) - uploadExpansionTo(file, variants[0].versionCodeOverride) - variants.drop(1).forEach { attachExpansionTo(variants[0].versionCodeOverride, it) } - addToTrackInDraft(variants) + applicationVariants.releaseVariantsFor(this@createPublishBundleWithExpansionTask) + val generatedBundleFile = + File( + "$buildDir/outputs/bundle/${capitalizedName.toLowerCase()}" + + "Release/custom-${capitalizedName.toLowerCase()}-release.aab" + ) + if (generatedBundleFile.exists()) { + uploadBundle(generatedBundleFile) + uploadExpansionTo(file, variants[0].versionCode) + attachExpansionTo(variants[0].versionCode) + addToTrackInDraft(variants[0].versionCode, versionName) + } else { + throw FileNotFoundException("Unable to find generated aab file") + } } } } @@ -147,13 +157,14 @@ fun ProductFlavor.createPublishApkWithExpansionTask( @Suppress("DEPRECATION") fun DomainObjectSet.releaseVariantsFor(productFlavor: ProductFlavor) = find { it.name.equals("${productFlavor.name}Release", true) }!! - .outputs.filterIsInstance().sortedBy { it.versionCodeOverride } + .outputs.filterIsInstance() + .filter { it.baseName.contains("universal") }.sortedBy { it.versionCode } afterEvaluate { - tasks.filter { it.name.contains("ReleaseApkWithExpansionFile") }.forEach { + tasks.filter { it.name.contains("ReleaseBundleWithExpansionFile") }.forEach { val flavorName = - it.name.substringAfter("publish").substringBefore("ReleaseApkWithExpansionFile") + it.name.substringAfter("publish").substringBefore("ReleaseBundleWithExpansionFile") it.dependsOn.add(tasks.getByName("download${flavorName}Zim")) - it.dependsOn.add(tasks.getByName("assemble${flavorName}Release")) + it.dependsOn.add(tasks.getByName("bundle${flavorName}Release")) } }