Autoupdate
Deploy to FTP / deploy (push) Successful in 9s
Build APK / build (push) Failing after 1m12s

This commit is contained in:
Sebastian Molenda
2026-06-13 17:26:13 +02:00
parent a99f5167a9
commit 36757d1fb9
92 changed files with 465 additions and 243 deletions
@@ -1,5 +1,6 @@
#Sat Jun 06 08:21:02 CEST 2026
#Sat Jun 13 17:10:52 CEST 2026
com.example.app-main-23\:/drawable/ic_launcher_foreground.xml=/Users/aln/Work/Matma/app/build/intermediates/merged_res/debug/mergeDebugResources/drawable_ic_launcher_foreground.xml.flat
com.example.app-main-23\:/layout/activity_splash.xml=/Users/aln/Work/Matma/app/build/intermediates/merged_res/debug/mergeDebugResources/layout_activity_splash.xml.flat
com.example.app-main-23\:/mipmap-anydpi-v26/ic_launcher.xml=/Users/aln/Work/Matma/app/build/intermediates/merged_res/debug/mergeDebugResources/mipmap-anydpi-v26_ic_launcher.xml.flat
com.example.app-main-23\:/mipmap-hdpi/ic_launcher.png=/Users/aln/Work/Matma/app/build/intermediates/merged_res/debug/mergeDebugResources/mipmap-hdpi_ic_launcher.png.flat
com.example.app-main-23\:/mipmap-hdpi/ic_launcher_foreground.png=/Users/aln/Work/Matma/app/build/intermediates/merged_res/debug/mergeDebugResources/mipmap-hdpi_ic_launcher_foreground.png.flat
File diff suppressed because one or more lines are too long
@@ -1,5 +1,6 @@
#Sat Jun 06 08:21:02 CEST 2026
#Sat Jun 13 17:10:52 CEST 2026
com.example.app-main-5\:/drawable/ic_launcher_foreground.xml=/Users/aln/Work/Matma/app/build/intermediates/packaged_res/debug/packageDebugResources/drawable/ic_launcher_foreground.xml
com.example.app-main-5\:/layout/activity_splash.xml=/Users/aln/Work/Matma/app/build/intermediates/packaged_res/debug/packageDebugResources/layout/activity_splash.xml
com.example.app-main-5\:/mipmap-anydpi-v26/ic_launcher.xml=/Users/aln/Work/Matma/app/build/intermediates/packaged_res/debug/packageDebugResources/mipmap-anydpi-v26/ic_launcher.xml
com.example.app-main-5\:/mipmap-hdpi/ic_launcher.png=/Users/aln/Work/Matma/app/build/intermediates/packaged_res/debug/packageDebugResources/mipmap-hdpi-v4/ic_launcher.png
com.example.app-main-5\:/mipmap-hdpi/ic_launcher_foreground.png=/Users/aln/Work/Matma/app/build/intermediates/packaged_res/debug/packageDebugResources/mipmap-hdpi-v4/ic_launcher_foreground.png
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<merger version="3"><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="main$Generated" generated="true" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/Users/aln/Work/Matma/app/src/main/res"/></dataSet><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="main" generated-set="main$Generated" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~:!&lt;dir>navigation"><source path="/Users/aln/Work/Matma/app/src/main/res"><file name="ic_launcher_foreground" path="/Users/aln/Work/Matma/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png" qualifiers="mdpi-v4" type="mipmap"/><file name="ic_launcher" path="/Users/aln/Work/Matma/app/src/main/res/mipmap-mdpi/ic_launcher.png" qualifiers="mdpi-v4" type="mipmap"/><file name="ic_launcher_foreground" path="/Users/aln/Work/Matma/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png" qualifiers="hdpi-v4" type="mipmap"/><file name="ic_launcher" path="/Users/aln/Work/Matma/app/src/main/res/mipmap-hdpi/ic_launcher.png" qualifiers="hdpi-v4" type="mipmap"/><file name="ic_launcher_foreground" path="/Users/aln/Work/Matma/app/src/main/res/drawable/ic_launcher_foreground.xml" qualifiers="" type="drawable"/><file name="ic_launcher_foreground" path="/Users/aln/Work/Matma/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png" qualifiers="xxxhdpi-v4" type="mipmap"/><file name="ic_launcher" path="/Users/aln/Work/Matma/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png" qualifiers="xxxhdpi-v4" type="mipmap"/><file name="ic_launcher_foreground" path="/Users/aln/Work/Matma/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png" qualifiers="xxhdpi-v4" type="mipmap"/><file name="ic_launcher" path="/Users/aln/Work/Matma/app/src/main/res/mipmap-xxhdpi/ic_launcher.png" qualifiers="xxhdpi-v4" type="mipmap"/><file path="/Users/aln/Work/Matma/app/src/main/res/values/colors.xml" qualifiers=""><color name="ic_launcher_background">#2196F3</color></file><file path="/Users/aln/Work/Matma/app/src/main/res/values/styles.xml" qualifiers=""><style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<merger version="3"><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="main$Generated" generated="true" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/Users/aln/Work/Matma/app/src/main/res"/></dataSet><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="main" generated-set="main$Generated" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~:!&lt;dir>navigation"><source path="/Users/aln/Work/Matma/app/src/main/res"><file name="ic_launcher_foreground" path="/Users/aln/Work/Matma/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png" qualifiers="mdpi-v4" type="mipmap"/><file name="ic_launcher" path="/Users/aln/Work/Matma/app/src/main/res/mipmap-mdpi/ic_launcher.png" qualifiers="mdpi-v4" type="mipmap"/><file name="ic_launcher_foreground" path="/Users/aln/Work/Matma/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png" qualifiers="hdpi-v4" type="mipmap"/><file name="ic_launcher" path="/Users/aln/Work/Matma/app/src/main/res/mipmap-hdpi/ic_launcher.png" qualifiers="hdpi-v4" type="mipmap"/><file name="ic_launcher_foreground" path="/Users/aln/Work/Matma/app/src/main/res/drawable/ic_launcher_foreground.xml" qualifiers="" type="drawable"/><file name="ic_launcher_foreground" path="/Users/aln/Work/Matma/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png" qualifiers="xxxhdpi-v4" type="mipmap"/><file name="ic_launcher" path="/Users/aln/Work/Matma/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png" qualifiers="xxxhdpi-v4" type="mipmap"/><file name="activity_splash" path="/Users/aln/Work/Matma/app/src/main/res/layout/activity_splash.xml" qualifiers="" type="layout"/><file name="ic_launcher_foreground" path="/Users/aln/Work/Matma/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png" qualifiers="xxhdpi-v4" type="mipmap"/><file name="ic_launcher" path="/Users/aln/Work/Matma/app/src/main/res/mipmap-xxhdpi/ic_launcher.png" qualifiers="xxhdpi-v4" type="mipmap"/><file path="/Users/aln/Work/Matma/app/src/main/res/values/colors.xml" qualifiers=""><color name="ic_launcher_background">#2196F3</color></file><file path="/Users/aln/Work/Matma/app/src/main/res/values/styles.xml" qualifiers=""><style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
</style></file><file path="/Users/aln/Work/Matma/app/src/main/res/values/strings.xml" qualifiers=""><string name="app_name">Mądrik</string></file><file name="ic_launcher_foreground" path="/Users/aln/Work/Matma/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png" qualifiers="xhdpi-v4" type="mipmap"/><file name="ic_launcher" path="/Users/aln/Work/Matma/app/src/main/res/mipmap-xhdpi/ic_launcher.png" qualifiers="xhdpi-v4" type="mipmap"/><file name="ic_launcher" path="/Users/aln/Work/Matma/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml" qualifiers="anydpi-v26" type="mipmap"/></source></dataSet><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="debug$Generated" generated="true" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/Users/aln/Work/Matma/app/src/debug/res"/></dataSet><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="debug" generated-set="debug$Generated" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~:!&lt;dir>navigation"><source path="/Users/aln/Work/Matma/app/src/debug/res"/></dataSet><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="generated$Generated" generated="true" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/Users/aln/Work/Matma/app/build/generated/res/resValues/debug"/></dataSet><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="generated" generated-set="generated$Generated" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~:!&lt;dir>navigation"><source path="/Users/aln/Work/Matma/app/build/generated/res/resValues/debug"/></dataSet><mergedItems/></merger>
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<merger version="3"><dataSet config="main" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/Users/aln/Work/Matma/app/src/main/assets"><file name="czytanie.html" path="/Users/aln/Work/Matma/app/src/main/assets/czytanie.html"/><file name="index.html" path="/Users/aln/Work/Matma/app/src/main/assets/index.html"/><file name="styles.css" path="/Users/aln/Work/Matma/app/src/main/assets/styles.css"/><file name="css/styles.css" path="/Users/aln/Work/Matma/app/src/main/assets/css/styles.css"/><file name="css/fonts/inter.css" path="/Users/aln/Work/Matma/app/src/main/assets/css/fonts/inter.css"/><file name="js/mnozenie.js" path="/Users/aln/Work/Matma/app/src/main/assets/js/mnozenie.js"/><file name="js/dyktando.js" path="/Users/aln/Work/Matma/app/src/main/assets/js/dyktando.js"/><file name="js/version.js" path="/Users/aln/Work/Matma/app/src/main/assets/js/version.js"/><file name="js/components.js" path="/Users/aln/Work/Matma/app/src/main/assets/js/components.js"/><file name="js/czytanie.js" path="/Users/aln/Work/Matma/app/src/main/assets/js/czytanie.js"/><file name="js/nav.js" path="/Users/aln/Work/Matma/app/src/main/assets/js/nav.js"/><file name="js/app.js" path="/Users/aln/Work/Matma/app/src/main/assets/js/app.js"/><file name="js/dzielenie.js" path="/Users/aln/Work/Matma/app/src/main/assets/js/dzielenie.js"/><file name="mnozenie.html" path="/Users/aln/Work/Matma/app/src/main/assets/mnozenie.html"/><file name="dzielenie.html" path="/Users/aln/Work/Matma/app/src/main/assets/dzielenie.html"/><file name="components/progress-bar.html" path="/Users/aln/Work/Matma/app/src/main/assets/components/progress-bar.html"/><file name="components/footer.html" path="/Users/aln/Work/Matma/app/src/main/assets/components/footer.html"/><file name="components/header.html" path="/Users/aln/Work/Matma/app/src/main/assets/components/header.html"/><file name="json/dyktanda.json" path="/Users/aln/Work/Matma/app/src/main/assets/json/dyktanda.json"/><file name="dyktando.html" path="/Users/aln/Work/Matma/app/src/main/assets/dyktando.html"/><file name="testy.html" path="/Users/aln/Work/Matma/app/src/main/assets/testy.html"/><file name="fonts/Inter-Medium.ttf" path="/Users/aln/Work/Matma/app/src/main/assets/fonts/Inter-Medium.ttf"/><file name="fonts/Inter-Bold.ttf" path="/Users/aln/Work/Matma/app/src/main/assets/fonts/Inter-Bold.ttf"/><file name="fonts/Inter-Regular.ttf" path="/Users/aln/Work/Matma/app/src/main/assets/fonts/Inter-Regular.ttf"/><file name="fonts/Inter-ExtraBold.ttf" path="/Users/aln/Work/Matma/app/src/main/assets/fonts/Inter-ExtraBold.ttf"/></source></dataSet><dataSet config="debug" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/Users/aln/Work/Matma/app/src/debug/assets"/></dataSet><dataSet config="generated" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/Users/aln/Work/Matma/app/build/intermediates/shader_assets/debug/compileDebugShaders/out"/></dataSet></merger>
<merger version="3"><dataSet config="main" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/Users/aln/Work/Matma/app/src/main/assets"><file name="czytanie.html" path="/Users/aln/Work/Matma/app/src/main/assets/czytanie.html"/><file name="index.html" path="/Users/aln/Work/Matma/app/src/main/assets/index.html"/><file name="styles.css" path="/Users/aln/Work/Matma/app/src/main/assets/styles.css"/><file name="css/styles.css" path="/Users/aln/Work/Matma/app/src/main/assets/css/styles.css"/><file name="css/fonts/inter.css" path="/Users/aln/Work/Matma/app/src/main/assets/css/fonts/inter.css"/><file name="js/mnozenie.js" path="/Users/aln/Work/Matma/app/src/main/assets/js/mnozenie.js"/><file name="js/dyktando.js" path="/Users/aln/Work/Matma/app/src/main/assets/js/dyktando.js"/><file name="js/version.js" path="/Users/aln/Work/Matma/app/src/main/assets/js/version.js"/><file name="js/components.js" path="/Users/aln/Work/Matma/app/src/main/assets/js/components.js"/><file name="js/czytanie.js" path="/Users/aln/Work/Matma/app/src/main/assets/js/czytanie.js"/><file name="js/nav.js" path="/Users/aln/Work/Matma/app/src/main/assets/js/nav.js"/><file name="js/app.js" path="/Users/aln/Work/Matma/app/src/main/assets/js/app.js"/><file name="js/dzielenie.js" path="/Users/aln/Work/Matma/app/src/main/assets/js/dzielenie.js"/><file name="mnozenie.html" path="/Users/aln/Work/Matma/app/src/main/assets/mnozenie.html"/><file name="dzielenie.html" path="/Users/aln/Work/Matma/app/src/main/assets/dzielenie.html"/><file name="components/progress-bar.html" path="/Users/aln/Work/Matma/app/src/main/assets/components/progress-bar.html"/><file name="components/footer.html" path="/Users/aln/Work/Matma/app/src/main/assets/components/footer.html"/><file name="components/header.html" path="/Users/aln/Work/Matma/app/src/main/assets/components/header.html"/><file name="json/dyktanda.json" path="/Users/aln/Work/Matma/app/src/main/assets/json/dyktanda.json"/><file name="dyktando.html" path="/Users/aln/Work/Matma/app/src/main/assets/dyktando.html"/><file name="testy.html" path="/Users/aln/Work/Matma/app/src/main/assets/testy.html"/><file name="fonts/Inter-Medium.ttf" path="/Users/aln/Work/Matma/app/src/main/assets/fonts/Inter-Medium.ttf"/><file name="fonts/Inter-Bold.ttf" path="/Users/aln/Work/Matma/app/src/main/assets/fonts/Inter-Bold.ttf"/><file name="fonts/Inter-Regular.ttf" path="/Users/aln/Work/Matma/app/src/main/assets/fonts/Inter-Regular.ttf"/><file name="fonts/Inter-ExtraBold.ttf" path="/Users/aln/Work/Matma/app/src/main/assets/fonts/Inter-ExtraBold.ttf"/></source></dataSet><dataSet config="debug" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/Users/aln/Work/Matma/app/src/debug/assets"/></dataSet></merger>
@@ -1,10 +1,13 @@
#Tue Jun 09 16:10:17 CEST 2026
base.2=/Users/aln/Work/Matma/app/build/intermediates/dex/debug/mergeProjectDexDebug/6/classes.dex
path.2=6/classes.dex
base.1=/Users/aln/Work/Matma/app/build/intermediates/dex/debug/mergeProjectDexDebug/0/classes.dex
path.1=0/classes.dex
#Sat Jun 13 17:25:09 CEST 2026
base.0=/Users/aln/Work/Matma/app/build/intermediates/dex/debug/mergeExtDexDebug/classes.dex
renamed.2=classes3.dex
renamed.1=classes2.dex
renamed.0=classes.dex
base.1=/Users/aln/Work/Matma/app/build/intermediates/dex/debug/mergeProjectDexDebug/0/classes.dex
base.2=/Users/aln/Work/Matma/app/build/intermediates/dex/debug/mergeProjectDexDebug/6/classes.dex
base.3=/Users/aln/Work/Matma/app/build/intermediates/global_synthetics_dex/debug/generateDebugGlobalSynthetics/classes.dex
path.0=classes.dex
path.1=0/classes.dex
path.2=6/classes.dex
path.3=classes.dex
renamed.0=classes.dex
renamed.1=classes2.dex
renamed.2=classes3.dex
renamed.3=classes4.dex
File diff suppressed because one or more lines are too long
@@ -1,2 +1,2 @@
3
5
0
Binary file not shown.
@@ -1,38 +1,38 @@
-- Merging decision tree log ---
manifest
ADDED from /Users/aln/Work/Matma/app/src/main/AndroidManifest.xml:2:1-19:12
INJECTED from /Users/aln/Work/Matma/app/src/main/AndroidManifest.xml:2:1-19:12
INJECTED from /Users/aln/Work/Matma/app/src/main/AndroidManifest.xml:2:1-19:12
INJECTED from /Users/aln/Work/Matma/app/src/main/AndroidManifest.xml:2:1-19:12
MERGED from [androidx.appcompat:appcompat-resources:1.6.1] /Users/aln/.gradle/caches/8.13/transforms/713638112f33325d15a386e2efe37538/transformed/jetified-appcompat-resources-1.6.1/AndroidManifest.xml:17:1-22:12
MERGED from [androidx.appcompat:appcompat:1.6.1] /Users/aln/.gradle/caches/8.13/transforms/6f9e8ecf0d3462dc2adbdc2c96ea4d0b/transformed/appcompat-1.6.1/AndroidManifest.xml:17:1-22:12
MERGED from [androidx.webkit:webkit:1.8.0] /Users/aln/.gradle/caches/8.13/transforms/6120691635c3c3efdd439e89e6eba3fe/transformed/webkit-1.8.0/AndroidManifest.xml:2:1-7:12
MERGED from [androidx.fragment:fragment:1.3.6] /Users/aln/.gradle/caches/8.13/transforms/8c4f7650a448352f4ffb70bfa94e26b5/transformed/fragment-1.3.6/AndroidManifest.xml:17:1-24:12
MERGED from [androidx.activity:activity:1.6.0] /Users/aln/.gradle/caches/8.13/transforms/99f25bd6be8b9102450d571c623f800c/transformed/jetified-activity-1.6.0/AndroidManifest.xml:17:1-22:12
MERGED from [androidx.drawerlayout:drawerlayout:1.0.0] /Users/aln/.gradle/caches/8.13/transforms/a4e3f3205f67d5987ee7b78b61c9cfa4/transformed/drawerlayout-1.0.0/AndroidManifest.xml:17:1-22:12
MERGED from [androidx.emoji2:emoji2-views-helper:1.2.0] /Users/aln/.gradle/caches/8.13/transforms/2d3e082a974d224108680c86f63f1b7c/transformed/jetified-emoji2-views-helper-1.2.0/AndroidManifest.xml:2:1-7:12
MERGED from [androidx.emoji2:emoji2:1.2.0] /Users/aln/.gradle/caches/8.13/transforms/207604a08049a111cf7ff17619f3189f/transformed/jetified-emoji2-1.2.0/AndroidManifest.xml:17:1-35:12
MERGED from [androidx.vectordrawable:vectordrawable-animated:1.1.0] /Users/aln/.gradle/caches/8.13/transforms/55157247b0c6074e5e9ad9670de48eda/transformed/vectordrawable-animated-1.1.0/AndroidManifest.xml:17:1-24:12
MERGED from [androidx.vectordrawable:vectordrawable:1.1.0] /Users/aln/.gradle/caches/8.13/transforms/0b6164b90fdc603f92c5352117dda76f/transformed/vectordrawable-1.1.0/AndroidManifest.xml:17:1-24:12
MERGED from [androidx.viewpager:viewpager:1.0.0] /Users/aln/.gradle/caches/8.13/transforms/d9e0c936320936da0b576c2c55fb5397/transformed/viewpager-1.0.0/AndroidManifest.xml:17:1-22:12
MERGED from [androidx.customview:customview:1.0.0] /Users/aln/.gradle/caches/8.13/transforms/7fd9fbe772debba1a8dd05d005259ea4/transformed/customview-1.0.0/AndroidManifest.xml:17:1-22:12
MERGED from [androidx.loader:loader:1.0.0] /Users/aln/.gradle/caches/8.13/transforms/b2712e4aa9905fab080709e3d38ad8e8/transformed/loader-1.0.0/AndroidManifest.xml:17:1-22:12
MERGED from [androidx.core:core:1.9.0] /Users/aln/.gradle/caches/8.13/transforms/3998928c0b9fc73079f29061a0297878/transformed/core-1.9.0/AndroidManifest.xml:17:1-30:12
MERGED from [androidx.lifecycle:lifecycle-viewmodel:2.5.1] /Users/aln/.gradle/caches/8.13/transforms/7397d3192dec0258e660ee189ab7ef49/transformed/lifecycle-viewmodel-2.5.1/AndroidManifest.xml:17:1-24:12
MERGED from [androidx.lifecycle:lifecycle-viewmodel-savedstate:2.5.1] /Users/aln/.gradle/caches/8.13/transforms/0fe1a7a193385e3f14bcfc49387de81f/transformed/jetified-lifecycle-viewmodel-savedstate-2.5.1/AndroidManifest.xml:17:1-24:12
MERGED from [androidx.core:core-ktx:1.9.0] /Users/aln/.gradle/caches/8.13/transforms/67176fb9e011fbf4ee75d79879ac2016/transformed/jetified-core-ktx-1.9.0/AndroidManifest.xml:2:1-7:12
MERGED from [androidx.savedstate:savedstate:1.2.0] /Users/aln/.gradle/caches/8.13/transforms/570372f4f80aa06cc1d6728ff46086b5/transformed/jetified-savedstate-1.2.0/AndroidManifest.xml:17:1-24:12
MERGED from [androidx.annotation:annotation-experimental:1.3.0] /Users/aln/.gradle/caches/8.13/transforms/c68763c89829776b661e04e5854f62d4/transformed/jetified-annotation-experimental-1.3.0/AndroidManifest.xml:17:1-22:12
MERGED from [androidx.cursoradapter:cursoradapter:1.0.0] /Users/aln/.gradle/caches/8.13/transforms/c2c978dd2d9a48ba382a41dc9b6123ec/transformed/cursoradapter-1.0.0/AndroidManifest.xml:17:1-22:12
MERGED from [androidx.lifecycle:lifecycle-process:2.4.1] /Users/aln/.gradle/caches/8.13/transforms/d89f8ae20a95875eed3b361333d04057/transformed/jetified-lifecycle-process-2.4.1/AndroidManifest.xml:17:1-37:12
MERGED from [androidx.lifecycle:lifecycle-runtime:2.5.1] /Users/aln/.gradle/caches/8.13/transforms/84bc96fceee56c7b3392758537c865b5/transformed/lifecycle-runtime-2.5.1/AndroidManifest.xml:17:1-24:12
MERGED from [androidx.versionedparcelable:versionedparcelable:1.1.1] /Users/aln/.gradle/caches/8.13/transforms/e5f42c742315b6e699ecd09b52c5f4dc/transformed/versionedparcelable-1.1.1/AndroidManifest.xml:17:1-27:12
MERGED from [androidx.startup:startup-runtime:1.1.1] /Users/aln/.gradle/caches/8.13/transforms/4009683a95d035d4941ffe7cbfe569e1/transformed/jetified-startup-runtime-1.1.1/AndroidManifest.xml:17:1-33:12
MERGED from [androidx.tracing:tracing:1.0.0] /Users/aln/.gradle/caches/8.13/transforms/841a4f80e6a783be16f1611b1127a01d/transformed/jetified-tracing-1.0.0/AndroidManifest.xml:17:1-24:12
MERGED from [androidx.lifecycle:lifecycle-livedata:2.0.0] /Users/aln/.gradle/caches/8.13/transforms/e0ed78fd202b9e9baa1390cf45bec20c/transformed/lifecycle-livedata-2.0.0/AndroidManifest.xml:17:1-22:12
MERGED from [androidx.lifecycle:lifecycle-livedata-core:2.5.1] /Users/aln/.gradle/caches/8.13/transforms/4ba5ffe77a1c5eb74b8c9d26b0ee0b12/transformed/lifecycle-livedata-core-2.5.1/AndroidManifest.xml:17:1-24:12
MERGED from [androidx.arch.core:core-runtime:2.1.0] /Users/aln/.gradle/caches/8.13/transforms/0089b18ff108eb52f8d22f075041b40a/transformed/core-runtime-2.1.0/AndroidManifest.xml:17:1-24:12
MERGED from [androidx.interpolator:interpolator:1.0.0] /Users/aln/.gradle/caches/8.13/transforms/c1a25ca6f5596433934f0708686b4c4d/transformed/interpolator-1.0.0/AndroidManifest.xml:17:1-22:12
ADDED from /Users/aln/Work/Matma/app/src/main/AndroidManifest.xml:2:1-20:12
INJECTED from /Users/aln/Work/Matma/app/src/main/AndroidManifest.xml:2:1-20:12
INJECTED from /Users/aln/Work/Matma/app/src/main/AndroidManifest.xml:2:1-20:12
INJECTED from /Users/aln/Work/Matma/app/src/main/AndroidManifest.xml:2:1-20:12
MERGED from [androidx.appcompat:appcompat-resources:1.6.1] /Users/aln/.gradle/caches/9.4.1/transforms/d13c4284f6d4c5d01809adcb8021f6a3/transformed/jetified-appcompat-resources-1.6.1/AndroidManifest.xml:17:1-22:12
MERGED from [androidx.appcompat:appcompat:1.6.1] /Users/aln/.gradle/caches/9.4.1/transforms/3969f89346de637e0ad982302e59cf31/transformed/appcompat-1.6.1/AndroidManifest.xml:17:1-22:12
MERGED from [androidx.webkit:webkit:1.8.0] /Users/aln/.gradle/caches/9.4.1/transforms/29d4f5ad4b45d9964d7986f50324b6c4/transformed/webkit-1.8.0/AndroidManifest.xml:2:1-7:12
MERGED from [androidx.fragment:fragment:1.3.6] /Users/aln/.gradle/caches/9.4.1/transforms/b8fcb7f17da310b61fb65d3be7774e2b/transformed/fragment-1.3.6/AndroidManifest.xml:17:1-24:12
MERGED from [androidx.activity:activity:1.6.0] /Users/aln/.gradle/caches/9.4.1/transforms/f6a193e29b611a70adc40b162f71866c/transformed/jetified-activity-1.6.0/AndroidManifest.xml:17:1-22:12
MERGED from [androidx.drawerlayout:drawerlayout:1.0.0] /Users/aln/.gradle/caches/9.4.1/transforms/e0bd629ca5cc9e1e131473e25117d734/transformed/drawerlayout-1.0.0/AndroidManifest.xml:17:1-22:12
MERGED from [androidx.emoji2:emoji2-views-helper:1.2.0] /Users/aln/.gradle/caches/9.4.1/transforms/ee45953d1f3efdb6beaa8c650ff71d85/transformed/jetified-emoji2-views-helper-1.2.0/AndroidManifest.xml:2:1-7:12
MERGED from [androidx.emoji2:emoji2:1.2.0] /Users/aln/.gradle/caches/9.4.1/transforms/94725fbbff6deff236a54621c2b5f4e4/transformed/jetified-emoji2-1.2.0/AndroidManifest.xml:17:1-35:12
MERGED from [androidx.vectordrawable:vectordrawable-animated:1.1.0] /Users/aln/.gradle/caches/9.4.1/transforms/b2f413d4baa07c2e8c7678506b223b42/transformed/vectordrawable-animated-1.1.0/AndroidManifest.xml:17:1-24:12
MERGED from [androidx.vectordrawable:vectordrawable:1.1.0] /Users/aln/.gradle/caches/9.4.1/transforms/30f91f8a59f8474f001e44d296085da9/transformed/vectordrawable-1.1.0/AndroidManifest.xml:17:1-24:12
MERGED from [androidx.viewpager:viewpager:1.0.0] /Users/aln/.gradle/caches/9.4.1/transforms/2391166240bb1fe60da7a5801b18139a/transformed/viewpager-1.0.0/AndroidManifest.xml:17:1-22:12
MERGED from [androidx.customview:customview:1.0.0] /Users/aln/.gradle/caches/9.4.1/transforms/db91b1bbb5adf89ee504d37cc38fa117/transformed/customview-1.0.0/AndroidManifest.xml:17:1-22:12
MERGED from [androidx.loader:loader:1.0.0] /Users/aln/.gradle/caches/9.4.1/transforms/29b72aeaf74120861614778ede0f7039/transformed/loader-1.0.0/AndroidManifest.xml:17:1-22:12
MERGED from [androidx.core:core:1.9.0] /Users/aln/.gradle/caches/9.4.1/transforms/b2ed58dc9f03b7c299e141c3cc3c8031/transformed/core-1.9.0/AndroidManifest.xml:17:1-30:12
MERGED from [androidx.lifecycle:lifecycle-viewmodel:2.5.1] /Users/aln/.gradle/caches/9.4.1/transforms/e99b345e1e1ee79842a762c787378afb/transformed/lifecycle-viewmodel-2.5.1/AndroidManifest.xml:17:1-24:12
MERGED from [androidx.lifecycle:lifecycle-viewmodel-savedstate:2.5.1] /Users/aln/.gradle/caches/9.4.1/transforms/807e3878a3bca3f50434d424d039555a/transformed/jetified-lifecycle-viewmodel-savedstate-2.5.1/AndroidManifest.xml:17:1-24:12
MERGED from [androidx.core:core-ktx:1.9.0] /Users/aln/.gradle/caches/9.4.1/transforms/ced1b185d2c82fbb2e97075f3d7c8a55/transformed/jetified-core-ktx-1.9.0/AndroidManifest.xml:2:1-7:12
MERGED from [androidx.savedstate:savedstate:1.2.0] /Users/aln/.gradle/caches/9.4.1/transforms/ba5c29f6d621a58dc4384ba92df8386f/transformed/jetified-savedstate-1.2.0/AndroidManifest.xml:17:1-24:12
MERGED from [androidx.annotation:annotation-experimental:1.3.0] /Users/aln/.gradle/caches/9.4.1/transforms/05b87fd6b1bbbfebbf606e2b3ecc0fc7/transformed/jetified-annotation-experimental-1.3.0/AndroidManifest.xml:17:1-22:12
MERGED from [androidx.cursoradapter:cursoradapter:1.0.0] /Users/aln/.gradle/caches/9.4.1/transforms/bab794db77407ed3ab60c8956c3820d5/transformed/cursoradapter-1.0.0/AndroidManifest.xml:17:1-22:12
MERGED from [androidx.lifecycle:lifecycle-process:2.4.1] /Users/aln/.gradle/caches/9.4.1/transforms/fa5338f12be99a5090b21af953bb5682/transformed/jetified-lifecycle-process-2.4.1/AndroidManifest.xml:17:1-37:12
MERGED from [androidx.lifecycle:lifecycle-runtime:2.5.1] /Users/aln/.gradle/caches/9.4.1/transforms/7e752b2bd937d1085f08ad0c55cdcacb/transformed/lifecycle-runtime-2.5.1/AndroidManifest.xml:17:1-24:12
MERGED from [androidx.versionedparcelable:versionedparcelable:1.1.1] /Users/aln/.gradle/caches/9.4.1/transforms/daf231a4ba397b3a6b84ca798f5c75b4/transformed/versionedparcelable-1.1.1/AndroidManifest.xml:17:1-27:12
MERGED from [androidx.startup:startup-runtime:1.1.1] /Users/aln/.gradle/caches/9.4.1/transforms/96ed0581ce971984bd5d829f62572234/transformed/jetified-startup-runtime-1.1.1/AndroidManifest.xml:17:1-33:12
MERGED from [androidx.tracing:tracing:1.0.0] /Users/aln/.gradle/caches/9.4.1/transforms/56262015404c85952b5962cb1f231031/transformed/jetified-tracing-1.0.0/AndroidManifest.xml:17:1-24:12
MERGED from [androidx.lifecycle:lifecycle-livedata:2.0.0] /Users/aln/.gradle/caches/9.4.1/transforms/7b9db7d2633fa4fe54cc006ada26803b/transformed/lifecycle-livedata-2.0.0/AndroidManifest.xml:17:1-22:12
MERGED from [androidx.lifecycle:lifecycle-livedata-core:2.5.1] /Users/aln/.gradle/caches/9.4.1/transforms/f868691aa015f43c68018d894221c368/transformed/lifecycle-livedata-core-2.5.1/AndroidManifest.xml:17:1-24:12
MERGED from [androidx.arch.core:core-runtime:2.1.0] /Users/aln/.gradle/caches/9.4.1/transforms/74310c6ce80b731954534d5ee1d49362/transformed/core-runtime-2.1.0/AndroidManifest.xml:17:1-24:12
MERGED from [androidx.interpolator:interpolator:1.0.0] /Users/aln/.gradle/caches/9.4.1/transforms/2f6204e71abdc431b544e429dc1da85e/transformed/interpolator-1.0.0/AndroidManifest.xml:17:1-22:12
package
INJECTED from /Users/aln/Work/Matma/app/src/main/AndroidManifest.xml
android:versionName
@@ -45,158 +45,162 @@ uses-permission#android.permission.INTERNET
ADDED from /Users/aln/Work/Matma/app/src/main/AndroidManifest.xml:3:5-67
android:name
ADDED from /Users/aln/Work/Matma/app/src/main/AndroidManifest.xml:3:22-64
uses-permission#android.permission.ACCESS_NETWORK_STATE
ADDED from /Users/aln/Work/Matma/app/src/main/AndroidManifest.xml:4:5-79
android:name
ADDED from /Users/aln/Work/Matma/app/src/main/AndroidManifest.xml:4:22-76
application
ADDED from /Users/aln/Work/Matma/app/src/main/AndroidManifest.xml:4:5-18:19
INJECTED from /Users/aln/Work/Matma/app/src/main/AndroidManifest.xml:4:5-18:19
MERGED from [androidx.emoji2:emoji2:1.2.0] /Users/aln/.gradle/caches/8.13/transforms/207604a08049a111cf7ff17619f3189f/transformed/jetified-emoji2-1.2.0/AndroidManifest.xml:23:5-33:19
MERGED from [androidx.emoji2:emoji2:1.2.0] /Users/aln/.gradle/caches/8.13/transforms/207604a08049a111cf7ff17619f3189f/transformed/jetified-emoji2-1.2.0/AndroidManifest.xml:23:5-33:19
MERGED from [androidx.core:core:1.9.0] /Users/aln/.gradle/caches/8.13/transforms/3998928c0b9fc73079f29061a0297878/transformed/core-1.9.0/AndroidManifest.xml:28:5-89
MERGED from [androidx.core:core:1.9.0] /Users/aln/.gradle/caches/8.13/transforms/3998928c0b9fc73079f29061a0297878/transformed/core-1.9.0/AndroidManifest.xml:28:5-89
MERGED from [androidx.lifecycle:lifecycle-process:2.4.1] /Users/aln/.gradle/caches/8.13/transforms/d89f8ae20a95875eed3b361333d04057/transformed/jetified-lifecycle-process-2.4.1/AndroidManifest.xml:25:5-35:19
MERGED from [androidx.lifecycle:lifecycle-process:2.4.1] /Users/aln/.gradle/caches/8.13/transforms/d89f8ae20a95875eed3b361333d04057/transformed/jetified-lifecycle-process-2.4.1/AndroidManifest.xml:25:5-35:19
MERGED from [androidx.versionedparcelable:versionedparcelable:1.1.1] /Users/aln/.gradle/caches/8.13/transforms/e5f42c742315b6e699ecd09b52c5f4dc/transformed/versionedparcelable-1.1.1/AndroidManifest.xml:24:5-25:19
MERGED from [androidx.versionedparcelable:versionedparcelable:1.1.1] /Users/aln/.gradle/caches/8.13/transforms/e5f42c742315b6e699ecd09b52c5f4dc/transformed/versionedparcelable-1.1.1/AndroidManifest.xml:24:5-25:19
MERGED from [androidx.startup:startup-runtime:1.1.1] /Users/aln/.gradle/caches/8.13/transforms/4009683a95d035d4941ffe7cbfe569e1/transformed/jetified-startup-runtime-1.1.1/AndroidManifest.xml:25:5-31:19
MERGED from [androidx.startup:startup-runtime:1.1.1] /Users/aln/.gradle/caches/8.13/transforms/4009683a95d035d4941ffe7cbfe569e1/transformed/jetified-startup-runtime-1.1.1/AndroidManifest.xml:25:5-31:19
ADDED from /Users/aln/Work/Matma/app/src/main/AndroidManifest.xml:5:5-19:19
INJECTED from /Users/aln/Work/Matma/app/src/main/AndroidManifest.xml:5:5-19:19
MERGED from [androidx.emoji2:emoji2:1.2.0] /Users/aln/.gradle/caches/9.4.1/transforms/94725fbbff6deff236a54621c2b5f4e4/transformed/jetified-emoji2-1.2.0/AndroidManifest.xml:23:5-33:19
MERGED from [androidx.emoji2:emoji2:1.2.0] /Users/aln/.gradle/caches/9.4.1/transforms/94725fbbff6deff236a54621c2b5f4e4/transformed/jetified-emoji2-1.2.0/AndroidManifest.xml:23:5-33:19
MERGED from [androidx.core:core:1.9.0] /Users/aln/.gradle/caches/9.4.1/transforms/b2ed58dc9f03b7c299e141c3cc3c8031/transformed/core-1.9.0/AndroidManifest.xml:28:5-89
MERGED from [androidx.core:core:1.9.0] /Users/aln/.gradle/caches/9.4.1/transforms/b2ed58dc9f03b7c299e141c3cc3c8031/transformed/core-1.9.0/AndroidManifest.xml:28:5-89
MERGED from [androidx.lifecycle:lifecycle-process:2.4.1] /Users/aln/.gradle/caches/9.4.1/transforms/fa5338f12be99a5090b21af953bb5682/transformed/jetified-lifecycle-process-2.4.1/AndroidManifest.xml:25:5-35:19
MERGED from [androidx.lifecycle:lifecycle-process:2.4.1] /Users/aln/.gradle/caches/9.4.1/transforms/fa5338f12be99a5090b21af953bb5682/transformed/jetified-lifecycle-process-2.4.1/AndroidManifest.xml:25:5-35:19
MERGED from [androidx.versionedparcelable:versionedparcelable:1.1.1] /Users/aln/.gradle/caches/9.4.1/transforms/daf231a4ba397b3a6b84ca798f5c75b4/transformed/versionedparcelable-1.1.1/AndroidManifest.xml:24:5-25:19
MERGED from [androidx.versionedparcelable:versionedparcelable:1.1.1] /Users/aln/.gradle/caches/9.4.1/transforms/daf231a4ba397b3a6b84ca798f5c75b4/transformed/versionedparcelable-1.1.1/AndroidManifest.xml:24:5-25:19
MERGED from [androidx.startup:startup-runtime:1.1.1] /Users/aln/.gradle/caches/9.4.1/transforms/96ed0581ce971984bd5d829f62572234/transformed/jetified-startup-runtime-1.1.1/AndroidManifest.xml:25:5-31:19
MERGED from [androidx.startup:startup-runtime:1.1.1] /Users/aln/.gradle/caches/9.4.1/transforms/96ed0581ce971984bd5d829f62572234/transformed/jetified-startup-runtime-1.1.1/AndroidManifest.xml:25:5-31:19
android:extractNativeLibs
INJECTED from /Users/aln/Work/Matma/app/src/main/AndroidManifest.xml
android:appComponentFactory
ADDED from [androidx.core:core:1.9.0] /Users/aln/.gradle/caches/8.13/transforms/3998928c0b9fc73079f29061a0297878/transformed/core-1.9.0/AndroidManifest.xml:28:18-86
ADDED from [androidx.core:core:1.9.0] /Users/aln/.gradle/caches/9.4.1/transforms/b2ed58dc9f03b7c299e141c3cc3c8031/transformed/core-1.9.0/AndroidManifest.xml:28:18-86
android:label
ADDED from /Users/aln/Work/Matma/app/src/main/AndroidManifest.xml:6:9-41
ADDED from /Users/aln/Work/Matma/app/src/main/AndroidManifest.xml:7:9-41
android:icon
ADDED from /Users/aln/Work/Matma/app/src/main/AndroidManifest.xml:7:9-43
ADDED from /Users/aln/Work/Matma/app/src/main/AndroidManifest.xml:8:9-43
android:theme
ADDED from /Users/aln/Work/Matma/app/src/main/AndroidManifest.xml:5:9-40
ADDED from /Users/aln/Work/Matma/app/src/main/AndroidManifest.xml:6:9-40
activity#com.example.app.MainActivity
ADDED from /Users/aln/Work/Matma/app/src/main/AndroidManifest.xml:8:9-17:20
ADDED from /Users/aln/Work/Matma/app/src/main/AndroidManifest.xml:9:9-18:20
android:screenOrientation
ADDED from /Users/aln/Work/Matma/app/src/main/AndroidManifest.xml:11:13-49
ADDED from /Users/aln/Work/Matma/app/src/main/AndroidManifest.xml:12:13-49
android:exported
ADDED from /Users/aln/Work/Matma/app/src/main/AndroidManifest.xml:10:13-36
ADDED from /Users/aln/Work/Matma/app/src/main/AndroidManifest.xml:11:13-36
android:configChanges
ADDED from /Users/aln/Work/Matma/app/src/main/AndroidManifest.xml:12:13-59
ADDED from /Users/aln/Work/Matma/app/src/main/AndroidManifest.xml:13:13-59
android:name
ADDED from /Users/aln/Work/Matma/app/src/main/AndroidManifest.xml:9:13-41
ADDED from /Users/aln/Work/Matma/app/src/main/AndroidManifest.xml:10:13-41
intent-filter#action:name:android.intent.action.MAIN+category:name:android.intent.category.LAUNCHER
ADDED from /Users/aln/Work/Matma/app/src/main/AndroidManifest.xml:13:13-16:29
ADDED from /Users/aln/Work/Matma/app/src/main/AndroidManifest.xml:14:13-17:29
action#android.intent.action.MAIN
ADDED from /Users/aln/Work/Matma/app/src/main/AndroidManifest.xml:14:17-69
ADDED from /Users/aln/Work/Matma/app/src/main/AndroidManifest.xml:15:17-69
android:name
ADDED from /Users/aln/Work/Matma/app/src/main/AndroidManifest.xml:14:25-66
ADDED from /Users/aln/Work/Matma/app/src/main/AndroidManifest.xml:15:25-66
category#android.intent.category.LAUNCHER
ADDED from /Users/aln/Work/Matma/app/src/main/AndroidManifest.xml:15:17-77
ADDED from /Users/aln/Work/Matma/app/src/main/AndroidManifest.xml:16:17-77
android:name
ADDED from /Users/aln/Work/Matma/app/src/main/AndroidManifest.xml:15:27-74
ADDED from /Users/aln/Work/Matma/app/src/main/AndroidManifest.xml:16:27-74
uses-sdk
INJECTED from /Users/aln/Work/Matma/app/src/main/AndroidManifest.xml reason: use-sdk injection requested
INJECTED from /Users/aln/Work/Matma/app/src/main/AndroidManifest.xml
INJECTED from /Users/aln/Work/Matma/app/src/main/AndroidManifest.xml
MERGED from [androidx.appcompat:appcompat-resources:1.6.1] /Users/aln/.gradle/caches/8.13/transforms/713638112f33325d15a386e2efe37538/transformed/jetified-appcompat-resources-1.6.1/AndroidManifest.xml:20:5-44
MERGED from [androidx.appcompat:appcompat-resources:1.6.1] /Users/aln/.gradle/caches/8.13/transforms/713638112f33325d15a386e2efe37538/transformed/jetified-appcompat-resources-1.6.1/AndroidManifest.xml:20:5-44
MERGED from [androidx.appcompat:appcompat:1.6.1] /Users/aln/.gradle/caches/8.13/transforms/6f9e8ecf0d3462dc2adbdc2c96ea4d0b/transformed/appcompat-1.6.1/AndroidManifest.xml:20:5-44
MERGED from [androidx.appcompat:appcompat:1.6.1] /Users/aln/.gradle/caches/8.13/transforms/6f9e8ecf0d3462dc2adbdc2c96ea4d0b/transformed/appcompat-1.6.1/AndroidManifest.xml:20:5-44
MERGED from [androidx.webkit:webkit:1.8.0] /Users/aln/.gradle/caches/8.13/transforms/6120691635c3c3efdd439e89e6eba3fe/transformed/webkit-1.8.0/AndroidManifest.xml:5:5-44
MERGED from [androidx.webkit:webkit:1.8.0] /Users/aln/.gradle/caches/8.13/transforms/6120691635c3c3efdd439e89e6eba3fe/transformed/webkit-1.8.0/AndroidManifest.xml:5:5-44
MERGED from [androidx.fragment:fragment:1.3.6] /Users/aln/.gradle/caches/8.13/transforms/8c4f7650a448352f4ffb70bfa94e26b5/transformed/fragment-1.3.6/AndroidManifest.xml:20:5-22:41
MERGED from [androidx.fragment:fragment:1.3.6] /Users/aln/.gradle/caches/8.13/transforms/8c4f7650a448352f4ffb70bfa94e26b5/transformed/fragment-1.3.6/AndroidManifest.xml:20:5-22:41
MERGED from [androidx.activity:activity:1.6.0] /Users/aln/.gradle/caches/8.13/transforms/99f25bd6be8b9102450d571c623f800c/transformed/jetified-activity-1.6.0/AndroidManifest.xml:20:5-44
MERGED from [androidx.activity:activity:1.6.0] /Users/aln/.gradle/caches/8.13/transforms/99f25bd6be8b9102450d571c623f800c/transformed/jetified-activity-1.6.0/AndroidManifest.xml:20:5-44
MERGED from [androidx.drawerlayout:drawerlayout:1.0.0] /Users/aln/.gradle/caches/8.13/transforms/a4e3f3205f67d5987ee7b78b61c9cfa4/transformed/drawerlayout-1.0.0/AndroidManifest.xml:20:5-44
MERGED from [androidx.drawerlayout:drawerlayout:1.0.0] /Users/aln/.gradle/caches/8.13/transforms/a4e3f3205f67d5987ee7b78b61c9cfa4/transformed/drawerlayout-1.0.0/AndroidManifest.xml:20:5-44
MERGED from [androidx.emoji2:emoji2-views-helper:1.2.0] /Users/aln/.gradle/caches/8.13/transforms/2d3e082a974d224108680c86f63f1b7c/transformed/jetified-emoji2-views-helper-1.2.0/AndroidManifest.xml:5:5-44
MERGED from [androidx.emoji2:emoji2-views-helper:1.2.0] /Users/aln/.gradle/caches/8.13/transforms/2d3e082a974d224108680c86f63f1b7c/transformed/jetified-emoji2-views-helper-1.2.0/AndroidManifest.xml:5:5-44
MERGED from [androidx.emoji2:emoji2:1.2.0] /Users/aln/.gradle/caches/8.13/transforms/207604a08049a111cf7ff17619f3189f/transformed/jetified-emoji2-1.2.0/AndroidManifest.xml:21:5-44
MERGED from [androidx.emoji2:emoji2:1.2.0] /Users/aln/.gradle/caches/8.13/transforms/207604a08049a111cf7ff17619f3189f/transformed/jetified-emoji2-1.2.0/AndroidManifest.xml:21:5-44
MERGED from [androidx.vectordrawable:vectordrawable-animated:1.1.0] /Users/aln/.gradle/caches/8.13/transforms/55157247b0c6074e5e9ad9670de48eda/transformed/vectordrawable-animated-1.1.0/AndroidManifest.xml:20:5-22:41
MERGED from [androidx.vectordrawable:vectordrawable-animated:1.1.0] /Users/aln/.gradle/caches/8.13/transforms/55157247b0c6074e5e9ad9670de48eda/transformed/vectordrawable-animated-1.1.0/AndroidManifest.xml:20:5-22:41
MERGED from [androidx.vectordrawable:vectordrawable:1.1.0] /Users/aln/.gradle/caches/8.13/transforms/0b6164b90fdc603f92c5352117dda76f/transformed/vectordrawable-1.1.0/AndroidManifest.xml:20:5-22:41
MERGED from [androidx.vectordrawable:vectordrawable:1.1.0] /Users/aln/.gradle/caches/8.13/transforms/0b6164b90fdc603f92c5352117dda76f/transformed/vectordrawable-1.1.0/AndroidManifest.xml:20:5-22:41
MERGED from [androidx.viewpager:viewpager:1.0.0] /Users/aln/.gradle/caches/8.13/transforms/d9e0c936320936da0b576c2c55fb5397/transformed/viewpager-1.0.0/AndroidManifest.xml:20:5-44
MERGED from [androidx.viewpager:viewpager:1.0.0] /Users/aln/.gradle/caches/8.13/transforms/d9e0c936320936da0b576c2c55fb5397/transformed/viewpager-1.0.0/AndroidManifest.xml:20:5-44
MERGED from [androidx.customview:customview:1.0.0] /Users/aln/.gradle/caches/8.13/transforms/7fd9fbe772debba1a8dd05d005259ea4/transformed/customview-1.0.0/AndroidManifest.xml:20:5-44
MERGED from [androidx.customview:customview:1.0.0] /Users/aln/.gradle/caches/8.13/transforms/7fd9fbe772debba1a8dd05d005259ea4/transformed/customview-1.0.0/AndroidManifest.xml:20:5-44
MERGED from [androidx.loader:loader:1.0.0] /Users/aln/.gradle/caches/8.13/transforms/b2712e4aa9905fab080709e3d38ad8e8/transformed/loader-1.0.0/AndroidManifest.xml:20:5-44
MERGED from [androidx.loader:loader:1.0.0] /Users/aln/.gradle/caches/8.13/transforms/b2712e4aa9905fab080709e3d38ad8e8/transformed/loader-1.0.0/AndroidManifest.xml:20:5-44
MERGED from [androidx.core:core:1.9.0] /Users/aln/.gradle/caches/8.13/transforms/3998928c0b9fc73079f29061a0297878/transformed/core-1.9.0/AndroidManifest.xml:20:5-44
MERGED from [androidx.core:core:1.9.0] /Users/aln/.gradle/caches/8.13/transforms/3998928c0b9fc73079f29061a0297878/transformed/core-1.9.0/AndroidManifest.xml:20:5-44
MERGED from [androidx.lifecycle:lifecycle-viewmodel:2.5.1] /Users/aln/.gradle/caches/8.13/transforms/7397d3192dec0258e660ee189ab7ef49/transformed/lifecycle-viewmodel-2.5.1/AndroidManifest.xml:20:5-22:41
MERGED from [androidx.lifecycle:lifecycle-viewmodel:2.5.1] /Users/aln/.gradle/caches/8.13/transforms/7397d3192dec0258e660ee189ab7ef49/transformed/lifecycle-viewmodel-2.5.1/AndroidManifest.xml:20:5-22:41
MERGED from [androidx.lifecycle:lifecycle-viewmodel-savedstate:2.5.1] /Users/aln/.gradle/caches/8.13/transforms/0fe1a7a193385e3f14bcfc49387de81f/transformed/jetified-lifecycle-viewmodel-savedstate-2.5.1/AndroidManifest.xml:20:5-22:41
MERGED from [androidx.lifecycle:lifecycle-viewmodel-savedstate:2.5.1] /Users/aln/.gradle/caches/8.13/transforms/0fe1a7a193385e3f14bcfc49387de81f/transformed/jetified-lifecycle-viewmodel-savedstate-2.5.1/AndroidManifest.xml:20:5-22:41
MERGED from [androidx.core:core-ktx:1.9.0] /Users/aln/.gradle/caches/8.13/transforms/67176fb9e011fbf4ee75d79879ac2016/transformed/jetified-core-ktx-1.9.0/AndroidManifest.xml:5:5-44
MERGED from [androidx.core:core-ktx:1.9.0] /Users/aln/.gradle/caches/8.13/transforms/67176fb9e011fbf4ee75d79879ac2016/transformed/jetified-core-ktx-1.9.0/AndroidManifest.xml:5:5-44
MERGED from [androidx.savedstate:savedstate:1.2.0] /Users/aln/.gradle/caches/8.13/transforms/570372f4f80aa06cc1d6728ff46086b5/transformed/jetified-savedstate-1.2.0/AndroidManifest.xml:20:5-22:41
MERGED from [androidx.savedstate:savedstate:1.2.0] /Users/aln/.gradle/caches/8.13/transforms/570372f4f80aa06cc1d6728ff46086b5/transformed/jetified-savedstate-1.2.0/AndroidManifest.xml:20:5-22:41
MERGED from [androidx.annotation:annotation-experimental:1.3.0] /Users/aln/.gradle/caches/8.13/transforms/c68763c89829776b661e04e5854f62d4/transformed/jetified-annotation-experimental-1.3.0/AndroidManifest.xml:20:5-44
MERGED from [androidx.annotation:annotation-experimental:1.3.0] /Users/aln/.gradle/caches/8.13/transforms/c68763c89829776b661e04e5854f62d4/transformed/jetified-annotation-experimental-1.3.0/AndroidManifest.xml:20:5-44
MERGED from [androidx.cursoradapter:cursoradapter:1.0.0] /Users/aln/.gradle/caches/8.13/transforms/c2c978dd2d9a48ba382a41dc9b6123ec/transformed/cursoradapter-1.0.0/AndroidManifest.xml:20:5-44
MERGED from [androidx.cursoradapter:cursoradapter:1.0.0] /Users/aln/.gradle/caches/8.13/transforms/c2c978dd2d9a48ba382a41dc9b6123ec/transformed/cursoradapter-1.0.0/AndroidManifest.xml:20:5-44
MERGED from [androidx.lifecycle:lifecycle-process:2.4.1] /Users/aln/.gradle/caches/8.13/transforms/d89f8ae20a95875eed3b361333d04057/transformed/jetified-lifecycle-process-2.4.1/AndroidManifest.xml:21:5-23:41
MERGED from [androidx.lifecycle:lifecycle-process:2.4.1] /Users/aln/.gradle/caches/8.13/transforms/d89f8ae20a95875eed3b361333d04057/transformed/jetified-lifecycle-process-2.4.1/AndroidManifest.xml:21:5-23:41
MERGED from [androidx.lifecycle:lifecycle-runtime:2.5.1] /Users/aln/.gradle/caches/8.13/transforms/84bc96fceee56c7b3392758537c865b5/transformed/lifecycle-runtime-2.5.1/AndroidManifest.xml:20:5-22:41
MERGED from [androidx.lifecycle:lifecycle-runtime:2.5.1] /Users/aln/.gradle/caches/8.13/transforms/84bc96fceee56c7b3392758537c865b5/transformed/lifecycle-runtime-2.5.1/AndroidManifest.xml:20:5-22:41
MERGED from [androidx.versionedparcelable:versionedparcelable:1.1.1] /Users/aln/.gradle/caches/8.13/transforms/e5f42c742315b6e699ecd09b52c5f4dc/transformed/versionedparcelable-1.1.1/AndroidManifest.xml:20:5-22:41
MERGED from [androidx.versionedparcelable:versionedparcelable:1.1.1] /Users/aln/.gradle/caches/8.13/transforms/e5f42c742315b6e699ecd09b52c5f4dc/transformed/versionedparcelable-1.1.1/AndroidManifest.xml:20:5-22:41
MERGED from [androidx.startup:startup-runtime:1.1.1] /Users/aln/.gradle/caches/8.13/transforms/4009683a95d035d4941ffe7cbfe569e1/transformed/jetified-startup-runtime-1.1.1/AndroidManifest.xml:21:5-23:41
MERGED from [androidx.startup:startup-runtime:1.1.1] /Users/aln/.gradle/caches/8.13/transforms/4009683a95d035d4941ffe7cbfe569e1/transformed/jetified-startup-runtime-1.1.1/AndroidManifest.xml:21:5-23:41
MERGED from [androidx.tracing:tracing:1.0.0] /Users/aln/.gradle/caches/8.13/transforms/841a4f80e6a783be16f1611b1127a01d/transformed/jetified-tracing-1.0.0/AndroidManifest.xml:20:5-22:41
MERGED from [androidx.tracing:tracing:1.0.0] /Users/aln/.gradle/caches/8.13/transforms/841a4f80e6a783be16f1611b1127a01d/transformed/jetified-tracing-1.0.0/AndroidManifest.xml:20:5-22:41
MERGED from [androidx.lifecycle:lifecycle-livedata:2.0.0] /Users/aln/.gradle/caches/8.13/transforms/e0ed78fd202b9e9baa1390cf45bec20c/transformed/lifecycle-livedata-2.0.0/AndroidManifest.xml:20:5-44
MERGED from [androidx.lifecycle:lifecycle-livedata:2.0.0] /Users/aln/.gradle/caches/8.13/transforms/e0ed78fd202b9e9baa1390cf45bec20c/transformed/lifecycle-livedata-2.0.0/AndroidManifest.xml:20:5-44
MERGED from [androidx.lifecycle:lifecycle-livedata-core:2.5.1] /Users/aln/.gradle/caches/8.13/transforms/4ba5ffe77a1c5eb74b8c9d26b0ee0b12/transformed/lifecycle-livedata-core-2.5.1/AndroidManifest.xml:20:5-22:41
MERGED from [androidx.lifecycle:lifecycle-livedata-core:2.5.1] /Users/aln/.gradle/caches/8.13/transforms/4ba5ffe77a1c5eb74b8c9d26b0ee0b12/transformed/lifecycle-livedata-core-2.5.1/AndroidManifest.xml:20:5-22:41
MERGED from [androidx.arch.core:core-runtime:2.1.0] /Users/aln/.gradle/caches/8.13/transforms/0089b18ff108eb52f8d22f075041b40a/transformed/core-runtime-2.1.0/AndroidManifest.xml:20:5-22:41
MERGED from [androidx.arch.core:core-runtime:2.1.0] /Users/aln/.gradle/caches/8.13/transforms/0089b18ff108eb52f8d22f075041b40a/transformed/core-runtime-2.1.0/AndroidManifest.xml:20:5-22:41
MERGED from [androidx.interpolator:interpolator:1.0.0] /Users/aln/.gradle/caches/8.13/transforms/c1a25ca6f5596433934f0708686b4c4d/transformed/interpolator-1.0.0/AndroidManifest.xml:20:5-44
MERGED from [androidx.interpolator:interpolator:1.0.0] /Users/aln/.gradle/caches/8.13/transforms/c1a25ca6f5596433934f0708686b4c4d/transformed/interpolator-1.0.0/AndroidManifest.xml:20:5-44
MERGED from [androidx.appcompat:appcompat-resources:1.6.1] /Users/aln/.gradle/caches/9.4.1/transforms/d13c4284f6d4c5d01809adcb8021f6a3/transformed/jetified-appcompat-resources-1.6.1/AndroidManifest.xml:20:5-44
MERGED from [androidx.appcompat:appcompat-resources:1.6.1] /Users/aln/.gradle/caches/9.4.1/transforms/d13c4284f6d4c5d01809adcb8021f6a3/transformed/jetified-appcompat-resources-1.6.1/AndroidManifest.xml:20:5-44
MERGED from [androidx.appcompat:appcompat:1.6.1] /Users/aln/.gradle/caches/9.4.1/transforms/3969f89346de637e0ad982302e59cf31/transformed/appcompat-1.6.1/AndroidManifest.xml:20:5-44
MERGED from [androidx.appcompat:appcompat:1.6.1] /Users/aln/.gradle/caches/9.4.1/transforms/3969f89346de637e0ad982302e59cf31/transformed/appcompat-1.6.1/AndroidManifest.xml:20:5-44
MERGED from [androidx.webkit:webkit:1.8.0] /Users/aln/.gradle/caches/9.4.1/transforms/29d4f5ad4b45d9964d7986f50324b6c4/transformed/webkit-1.8.0/AndroidManifest.xml:5:5-44
MERGED from [androidx.webkit:webkit:1.8.0] /Users/aln/.gradle/caches/9.4.1/transforms/29d4f5ad4b45d9964d7986f50324b6c4/transformed/webkit-1.8.0/AndroidManifest.xml:5:5-44
MERGED from [androidx.fragment:fragment:1.3.6] /Users/aln/.gradle/caches/9.4.1/transforms/b8fcb7f17da310b61fb65d3be7774e2b/transformed/fragment-1.3.6/AndroidManifest.xml:20:5-22:41
MERGED from [androidx.fragment:fragment:1.3.6] /Users/aln/.gradle/caches/9.4.1/transforms/b8fcb7f17da310b61fb65d3be7774e2b/transformed/fragment-1.3.6/AndroidManifest.xml:20:5-22:41
MERGED from [androidx.activity:activity:1.6.0] /Users/aln/.gradle/caches/9.4.1/transforms/f6a193e29b611a70adc40b162f71866c/transformed/jetified-activity-1.6.0/AndroidManifest.xml:20:5-44
MERGED from [androidx.activity:activity:1.6.0] /Users/aln/.gradle/caches/9.4.1/transforms/f6a193e29b611a70adc40b162f71866c/transformed/jetified-activity-1.6.0/AndroidManifest.xml:20:5-44
MERGED from [androidx.drawerlayout:drawerlayout:1.0.0] /Users/aln/.gradle/caches/9.4.1/transforms/e0bd629ca5cc9e1e131473e25117d734/transformed/drawerlayout-1.0.0/AndroidManifest.xml:20:5-44
MERGED from [androidx.drawerlayout:drawerlayout:1.0.0] /Users/aln/.gradle/caches/9.4.1/transforms/e0bd629ca5cc9e1e131473e25117d734/transformed/drawerlayout-1.0.0/AndroidManifest.xml:20:5-44
MERGED from [androidx.emoji2:emoji2-views-helper:1.2.0] /Users/aln/.gradle/caches/9.4.1/transforms/ee45953d1f3efdb6beaa8c650ff71d85/transformed/jetified-emoji2-views-helper-1.2.0/AndroidManifest.xml:5:5-44
MERGED from [androidx.emoji2:emoji2-views-helper:1.2.0] /Users/aln/.gradle/caches/9.4.1/transforms/ee45953d1f3efdb6beaa8c650ff71d85/transformed/jetified-emoji2-views-helper-1.2.0/AndroidManifest.xml:5:5-44
MERGED from [androidx.emoji2:emoji2:1.2.0] /Users/aln/.gradle/caches/9.4.1/transforms/94725fbbff6deff236a54621c2b5f4e4/transformed/jetified-emoji2-1.2.0/AndroidManifest.xml:21:5-44
MERGED from [androidx.emoji2:emoji2:1.2.0] /Users/aln/.gradle/caches/9.4.1/transforms/94725fbbff6deff236a54621c2b5f4e4/transformed/jetified-emoji2-1.2.0/AndroidManifest.xml:21:5-44
MERGED from [androidx.vectordrawable:vectordrawable-animated:1.1.0] /Users/aln/.gradle/caches/9.4.1/transforms/b2f413d4baa07c2e8c7678506b223b42/transformed/vectordrawable-animated-1.1.0/AndroidManifest.xml:20:5-22:41
MERGED from [androidx.vectordrawable:vectordrawable-animated:1.1.0] /Users/aln/.gradle/caches/9.4.1/transforms/b2f413d4baa07c2e8c7678506b223b42/transformed/vectordrawable-animated-1.1.0/AndroidManifest.xml:20:5-22:41
MERGED from [androidx.vectordrawable:vectordrawable:1.1.0] /Users/aln/.gradle/caches/9.4.1/transforms/30f91f8a59f8474f001e44d296085da9/transformed/vectordrawable-1.1.0/AndroidManifest.xml:20:5-22:41
MERGED from [androidx.vectordrawable:vectordrawable:1.1.0] /Users/aln/.gradle/caches/9.4.1/transforms/30f91f8a59f8474f001e44d296085da9/transformed/vectordrawable-1.1.0/AndroidManifest.xml:20:5-22:41
MERGED from [androidx.viewpager:viewpager:1.0.0] /Users/aln/.gradle/caches/9.4.1/transforms/2391166240bb1fe60da7a5801b18139a/transformed/viewpager-1.0.0/AndroidManifest.xml:20:5-44
MERGED from [androidx.viewpager:viewpager:1.0.0] /Users/aln/.gradle/caches/9.4.1/transforms/2391166240bb1fe60da7a5801b18139a/transformed/viewpager-1.0.0/AndroidManifest.xml:20:5-44
MERGED from [androidx.customview:customview:1.0.0] /Users/aln/.gradle/caches/9.4.1/transforms/db91b1bbb5adf89ee504d37cc38fa117/transformed/customview-1.0.0/AndroidManifest.xml:20:5-44
MERGED from [androidx.customview:customview:1.0.0] /Users/aln/.gradle/caches/9.4.1/transforms/db91b1bbb5adf89ee504d37cc38fa117/transformed/customview-1.0.0/AndroidManifest.xml:20:5-44
MERGED from [androidx.loader:loader:1.0.0] /Users/aln/.gradle/caches/9.4.1/transforms/29b72aeaf74120861614778ede0f7039/transformed/loader-1.0.0/AndroidManifest.xml:20:5-44
MERGED from [androidx.loader:loader:1.0.0] /Users/aln/.gradle/caches/9.4.1/transforms/29b72aeaf74120861614778ede0f7039/transformed/loader-1.0.0/AndroidManifest.xml:20:5-44
MERGED from [androidx.core:core:1.9.0] /Users/aln/.gradle/caches/9.4.1/transforms/b2ed58dc9f03b7c299e141c3cc3c8031/transformed/core-1.9.0/AndroidManifest.xml:20:5-44
MERGED from [androidx.core:core:1.9.0] /Users/aln/.gradle/caches/9.4.1/transforms/b2ed58dc9f03b7c299e141c3cc3c8031/transformed/core-1.9.0/AndroidManifest.xml:20:5-44
MERGED from [androidx.lifecycle:lifecycle-viewmodel:2.5.1] /Users/aln/.gradle/caches/9.4.1/transforms/e99b345e1e1ee79842a762c787378afb/transformed/lifecycle-viewmodel-2.5.1/AndroidManifest.xml:20:5-22:41
MERGED from [androidx.lifecycle:lifecycle-viewmodel:2.5.1] /Users/aln/.gradle/caches/9.4.1/transforms/e99b345e1e1ee79842a762c787378afb/transformed/lifecycle-viewmodel-2.5.1/AndroidManifest.xml:20:5-22:41
MERGED from [androidx.lifecycle:lifecycle-viewmodel-savedstate:2.5.1] /Users/aln/.gradle/caches/9.4.1/transforms/807e3878a3bca3f50434d424d039555a/transformed/jetified-lifecycle-viewmodel-savedstate-2.5.1/AndroidManifest.xml:20:5-22:41
MERGED from [androidx.lifecycle:lifecycle-viewmodel-savedstate:2.5.1] /Users/aln/.gradle/caches/9.4.1/transforms/807e3878a3bca3f50434d424d039555a/transformed/jetified-lifecycle-viewmodel-savedstate-2.5.1/AndroidManifest.xml:20:5-22:41
MERGED from [androidx.core:core-ktx:1.9.0] /Users/aln/.gradle/caches/9.4.1/transforms/ced1b185d2c82fbb2e97075f3d7c8a55/transformed/jetified-core-ktx-1.9.0/AndroidManifest.xml:5:5-44
MERGED from [androidx.core:core-ktx:1.9.0] /Users/aln/.gradle/caches/9.4.1/transforms/ced1b185d2c82fbb2e97075f3d7c8a55/transformed/jetified-core-ktx-1.9.0/AndroidManifest.xml:5:5-44
MERGED from [androidx.savedstate:savedstate:1.2.0] /Users/aln/.gradle/caches/9.4.1/transforms/ba5c29f6d621a58dc4384ba92df8386f/transformed/jetified-savedstate-1.2.0/AndroidManifest.xml:20:5-22:41
MERGED from [androidx.savedstate:savedstate:1.2.0] /Users/aln/.gradle/caches/9.4.1/transforms/ba5c29f6d621a58dc4384ba92df8386f/transformed/jetified-savedstate-1.2.0/AndroidManifest.xml:20:5-22:41
MERGED from [androidx.annotation:annotation-experimental:1.3.0] /Users/aln/.gradle/caches/9.4.1/transforms/05b87fd6b1bbbfebbf606e2b3ecc0fc7/transformed/jetified-annotation-experimental-1.3.0/AndroidManifest.xml:20:5-44
MERGED from [androidx.annotation:annotation-experimental:1.3.0] /Users/aln/.gradle/caches/9.4.1/transforms/05b87fd6b1bbbfebbf606e2b3ecc0fc7/transformed/jetified-annotation-experimental-1.3.0/AndroidManifest.xml:20:5-44
MERGED from [androidx.cursoradapter:cursoradapter:1.0.0] /Users/aln/.gradle/caches/9.4.1/transforms/bab794db77407ed3ab60c8956c3820d5/transformed/cursoradapter-1.0.0/AndroidManifest.xml:20:5-44
MERGED from [androidx.cursoradapter:cursoradapter:1.0.0] /Users/aln/.gradle/caches/9.4.1/transforms/bab794db77407ed3ab60c8956c3820d5/transformed/cursoradapter-1.0.0/AndroidManifest.xml:20:5-44
MERGED from [androidx.lifecycle:lifecycle-process:2.4.1] /Users/aln/.gradle/caches/9.4.1/transforms/fa5338f12be99a5090b21af953bb5682/transformed/jetified-lifecycle-process-2.4.1/AndroidManifest.xml:21:5-23:41
MERGED from [androidx.lifecycle:lifecycle-process:2.4.1] /Users/aln/.gradle/caches/9.4.1/transforms/fa5338f12be99a5090b21af953bb5682/transformed/jetified-lifecycle-process-2.4.1/AndroidManifest.xml:21:5-23:41
MERGED from [androidx.lifecycle:lifecycle-runtime:2.5.1] /Users/aln/.gradle/caches/9.4.1/transforms/7e752b2bd937d1085f08ad0c55cdcacb/transformed/lifecycle-runtime-2.5.1/AndroidManifest.xml:20:5-22:41
MERGED from [androidx.lifecycle:lifecycle-runtime:2.5.1] /Users/aln/.gradle/caches/9.4.1/transforms/7e752b2bd937d1085f08ad0c55cdcacb/transformed/lifecycle-runtime-2.5.1/AndroidManifest.xml:20:5-22:41
MERGED from [androidx.versionedparcelable:versionedparcelable:1.1.1] /Users/aln/.gradle/caches/9.4.1/transforms/daf231a4ba397b3a6b84ca798f5c75b4/transformed/versionedparcelable-1.1.1/AndroidManifest.xml:20:5-22:41
MERGED from [androidx.versionedparcelable:versionedparcelable:1.1.1] /Users/aln/.gradle/caches/9.4.1/transforms/daf231a4ba397b3a6b84ca798f5c75b4/transformed/versionedparcelable-1.1.1/AndroidManifest.xml:20:5-22:41
MERGED from [androidx.startup:startup-runtime:1.1.1] /Users/aln/.gradle/caches/9.4.1/transforms/96ed0581ce971984bd5d829f62572234/transformed/jetified-startup-runtime-1.1.1/AndroidManifest.xml:21:5-23:41
MERGED from [androidx.startup:startup-runtime:1.1.1] /Users/aln/.gradle/caches/9.4.1/transforms/96ed0581ce971984bd5d829f62572234/transformed/jetified-startup-runtime-1.1.1/AndroidManifest.xml:21:5-23:41
MERGED from [androidx.tracing:tracing:1.0.0] /Users/aln/.gradle/caches/9.4.1/transforms/56262015404c85952b5962cb1f231031/transformed/jetified-tracing-1.0.0/AndroidManifest.xml:20:5-22:41
MERGED from [androidx.tracing:tracing:1.0.0] /Users/aln/.gradle/caches/9.4.1/transforms/56262015404c85952b5962cb1f231031/transformed/jetified-tracing-1.0.0/AndroidManifest.xml:20:5-22:41
MERGED from [androidx.lifecycle:lifecycle-livedata:2.0.0] /Users/aln/.gradle/caches/9.4.1/transforms/7b9db7d2633fa4fe54cc006ada26803b/transformed/lifecycle-livedata-2.0.0/AndroidManifest.xml:20:5-44
MERGED from [androidx.lifecycle:lifecycle-livedata:2.0.0] /Users/aln/.gradle/caches/9.4.1/transforms/7b9db7d2633fa4fe54cc006ada26803b/transformed/lifecycle-livedata-2.0.0/AndroidManifest.xml:20:5-44
MERGED from [androidx.lifecycle:lifecycle-livedata-core:2.5.1] /Users/aln/.gradle/caches/9.4.1/transforms/f868691aa015f43c68018d894221c368/transformed/lifecycle-livedata-core-2.5.1/AndroidManifest.xml:20:5-22:41
MERGED from [androidx.lifecycle:lifecycle-livedata-core:2.5.1] /Users/aln/.gradle/caches/9.4.1/transforms/f868691aa015f43c68018d894221c368/transformed/lifecycle-livedata-core-2.5.1/AndroidManifest.xml:20:5-22:41
MERGED from [androidx.arch.core:core-runtime:2.1.0] /Users/aln/.gradle/caches/9.4.1/transforms/74310c6ce80b731954534d5ee1d49362/transformed/core-runtime-2.1.0/AndroidManifest.xml:20:5-22:41
MERGED from [androidx.arch.core:core-runtime:2.1.0] /Users/aln/.gradle/caches/9.4.1/transforms/74310c6ce80b731954534d5ee1d49362/transformed/core-runtime-2.1.0/AndroidManifest.xml:20:5-22:41
MERGED from [androidx.interpolator:interpolator:1.0.0] /Users/aln/.gradle/caches/9.4.1/transforms/2f6204e71abdc431b544e429dc1da85e/transformed/interpolator-1.0.0/AndroidManifest.xml:20:5-44
MERGED from [androidx.interpolator:interpolator:1.0.0] /Users/aln/.gradle/caches/9.4.1/transforms/2f6204e71abdc431b544e429dc1da85e/transformed/interpolator-1.0.0/AndroidManifest.xml:20:5-44
android:targetSdkVersion
INJECTED from /Users/aln/Work/Matma/app/src/main/AndroidManifest.xml
android:minSdkVersion
INJECTED from /Users/aln/Work/Matma/app/src/main/AndroidManifest.xml
provider#androidx.startup.InitializationProvider
ADDED from [androidx.emoji2:emoji2:1.2.0] /Users/aln/.gradle/caches/8.13/transforms/207604a08049a111cf7ff17619f3189f/transformed/jetified-emoji2-1.2.0/AndroidManifest.xml:24:9-32:20
MERGED from [androidx.lifecycle:lifecycle-process:2.4.1] /Users/aln/.gradle/caches/8.13/transforms/d89f8ae20a95875eed3b361333d04057/transformed/jetified-lifecycle-process-2.4.1/AndroidManifest.xml:26:9-34:20
MERGED from [androidx.lifecycle:lifecycle-process:2.4.1] /Users/aln/.gradle/caches/8.13/transforms/d89f8ae20a95875eed3b361333d04057/transformed/jetified-lifecycle-process-2.4.1/AndroidManifest.xml:26:9-34:20
MERGED from [androidx.startup:startup-runtime:1.1.1] /Users/aln/.gradle/caches/8.13/transforms/4009683a95d035d4941ffe7cbfe569e1/transformed/jetified-startup-runtime-1.1.1/AndroidManifest.xml:26:9-30:34
MERGED from [androidx.startup:startup-runtime:1.1.1] /Users/aln/.gradle/caches/8.13/transforms/4009683a95d035d4941ffe7cbfe569e1/transformed/jetified-startup-runtime-1.1.1/AndroidManifest.xml:26:9-30:34
ADDED from [androidx.emoji2:emoji2:1.2.0] /Users/aln/.gradle/caches/9.4.1/transforms/94725fbbff6deff236a54621c2b5f4e4/transformed/jetified-emoji2-1.2.0/AndroidManifest.xml:24:9-32:20
MERGED from [androidx.lifecycle:lifecycle-process:2.4.1] /Users/aln/.gradle/caches/9.4.1/transforms/fa5338f12be99a5090b21af953bb5682/transformed/jetified-lifecycle-process-2.4.1/AndroidManifest.xml:26:9-34:20
MERGED from [androidx.lifecycle:lifecycle-process:2.4.1] /Users/aln/.gradle/caches/9.4.1/transforms/fa5338f12be99a5090b21af953bb5682/transformed/jetified-lifecycle-process-2.4.1/AndroidManifest.xml:26:9-34:20
MERGED from [androidx.startup:startup-runtime:1.1.1] /Users/aln/.gradle/caches/9.4.1/transforms/96ed0581ce971984bd5d829f62572234/transformed/jetified-startup-runtime-1.1.1/AndroidManifest.xml:26:9-30:34
MERGED from [androidx.startup:startup-runtime:1.1.1] /Users/aln/.gradle/caches/9.4.1/transforms/96ed0581ce971984bd5d829f62572234/transformed/jetified-startup-runtime-1.1.1/AndroidManifest.xml:26:9-30:34
tools:node
ADDED from [androidx.emoji2:emoji2:1.2.0] /Users/aln/.gradle/caches/8.13/transforms/207604a08049a111cf7ff17619f3189f/transformed/jetified-emoji2-1.2.0/AndroidManifest.xml:28:13-31
ADDED from [androidx.emoji2:emoji2:1.2.0] /Users/aln/.gradle/caches/9.4.1/transforms/94725fbbff6deff236a54621c2b5f4e4/transformed/jetified-emoji2-1.2.0/AndroidManifest.xml:28:13-31
android:authorities
ADDED from [androidx.emoji2:emoji2:1.2.0] /Users/aln/.gradle/caches/8.13/transforms/207604a08049a111cf7ff17619f3189f/transformed/jetified-emoji2-1.2.0/AndroidManifest.xml:26:13-68
ADDED from [androidx.emoji2:emoji2:1.2.0] /Users/aln/.gradle/caches/9.4.1/transforms/94725fbbff6deff236a54621c2b5f4e4/transformed/jetified-emoji2-1.2.0/AndroidManifest.xml:26:13-68
android:exported
ADDED from [androidx.emoji2:emoji2:1.2.0] /Users/aln/.gradle/caches/8.13/transforms/207604a08049a111cf7ff17619f3189f/transformed/jetified-emoji2-1.2.0/AndroidManifest.xml:27:13-37
ADDED from [androidx.emoji2:emoji2:1.2.0] /Users/aln/.gradle/caches/9.4.1/transforms/94725fbbff6deff236a54621c2b5f4e4/transformed/jetified-emoji2-1.2.0/AndroidManifest.xml:27:13-37
android:name
ADDED from [androidx.emoji2:emoji2:1.2.0] /Users/aln/.gradle/caches/8.13/transforms/207604a08049a111cf7ff17619f3189f/transformed/jetified-emoji2-1.2.0/AndroidManifest.xml:25:13-67
ADDED from [androidx.emoji2:emoji2:1.2.0] /Users/aln/.gradle/caches/9.4.1/transforms/94725fbbff6deff236a54621c2b5f4e4/transformed/jetified-emoji2-1.2.0/AndroidManifest.xml:25:13-67
meta-data#androidx.emoji2.text.EmojiCompatInitializer
ADDED from [androidx.emoji2:emoji2:1.2.0] /Users/aln/.gradle/caches/8.13/transforms/207604a08049a111cf7ff17619f3189f/transformed/jetified-emoji2-1.2.0/AndroidManifest.xml:29:13-31:52
ADDED from [androidx.emoji2:emoji2:1.2.0] /Users/aln/.gradle/caches/9.4.1/transforms/94725fbbff6deff236a54621c2b5f4e4/transformed/jetified-emoji2-1.2.0/AndroidManifest.xml:29:13-31:52
android:value
ADDED from [androidx.emoji2:emoji2:1.2.0] /Users/aln/.gradle/caches/8.13/transforms/207604a08049a111cf7ff17619f3189f/transformed/jetified-emoji2-1.2.0/AndroidManifest.xml:31:17-49
ADDED from [androidx.emoji2:emoji2:1.2.0] /Users/aln/.gradle/caches/9.4.1/transforms/94725fbbff6deff236a54621c2b5f4e4/transformed/jetified-emoji2-1.2.0/AndroidManifest.xml:31:17-49
android:name
ADDED from [androidx.emoji2:emoji2:1.2.0] /Users/aln/.gradle/caches/8.13/transforms/207604a08049a111cf7ff17619f3189f/transformed/jetified-emoji2-1.2.0/AndroidManifest.xml:30:17-75
ADDED from [androidx.emoji2:emoji2:1.2.0] /Users/aln/.gradle/caches/9.4.1/transforms/94725fbbff6deff236a54621c2b5f4e4/transformed/jetified-emoji2-1.2.0/AndroidManifest.xml:30:17-75
permission#${applicationId}.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION
ADDED from [androidx.core:core:1.9.0] /Users/aln/.gradle/caches/8.13/transforms/3998928c0b9fc73079f29061a0297878/transformed/core-1.9.0/AndroidManifest.xml:22:5-24:47
ADDED from [androidx.core:core:1.9.0] /Users/aln/.gradle/caches/9.4.1/transforms/b2ed58dc9f03b7c299e141c3cc3c8031/transformed/core-1.9.0/AndroidManifest.xml:22:5-24:47
android:protectionLevel
ADDED from [androidx.core:core:1.9.0] /Users/aln/.gradle/caches/8.13/transforms/3998928c0b9fc73079f29061a0297878/transformed/core-1.9.0/AndroidManifest.xml:24:9-44
ADDED from [androidx.core:core:1.9.0] /Users/aln/.gradle/caches/9.4.1/transforms/b2ed58dc9f03b7c299e141c3cc3c8031/transformed/core-1.9.0/AndroidManifest.xml:24:9-44
android:name
ADDED from [androidx.core:core:1.9.0] /Users/aln/.gradle/caches/8.13/transforms/3998928c0b9fc73079f29061a0297878/transformed/core-1.9.0/AndroidManifest.xml:23:9-81
ADDED from [androidx.core:core:1.9.0] /Users/aln/.gradle/caches/9.4.1/transforms/b2ed58dc9f03b7c299e141c3cc3c8031/transformed/core-1.9.0/AndroidManifest.xml:23:9-81
permission#com.example.app.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION
ADDED from [androidx.core:core:1.9.0] /Users/aln/.gradle/caches/8.13/transforms/3998928c0b9fc73079f29061a0297878/transformed/core-1.9.0/AndroidManifest.xml:22:5-24:47
ADDED from [androidx.core:core:1.9.0] /Users/aln/.gradle/caches/9.4.1/transforms/b2ed58dc9f03b7c299e141c3cc3c8031/transformed/core-1.9.0/AndroidManifest.xml:22:5-24:47
android:protectionLevel
ADDED from [androidx.core:core:1.9.0] /Users/aln/.gradle/caches/8.13/transforms/3998928c0b9fc73079f29061a0297878/transformed/core-1.9.0/AndroidManifest.xml:24:9-44
ADDED from [androidx.core:core:1.9.0] /Users/aln/.gradle/caches/9.4.1/transforms/b2ed58dc9f03b7c299e141c3cc3c8031/transformed/core-1.9.0/AndroidManifest.xml:24:9-44
android:name
ADDED from [androidx.core:core:1.9.0] /Users/aln/.gradle/caches/8.13/transforms/3998928c0b9fc73079f29061a0297878/transformed/core-1.9.0/AndroidManifest.xml:23:9-81
ADDED from [androidx.core:core:1.9.0] /Users/aln/.gradle/caches/9.4.1/transforms/b2ed58dc9f03b7c299e141c3cc3c8031/transformed/core-1.9.0/AndroidManifest.xml:23:9-81
uses-permission#${applicationId}.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION
ADDED from [androidx.core:core:1.9.0] /Users/aln/.gradle/caches/8.13/transforms/3998928c0b9fc73079f29061a0297878/transformed/core-1.9.0/AndroidManifest.xml:26:5-97
ADDED from [androidx.core:core:1.9.0] /Users/aln/.gradle/caches/9.4.1/transforms/b2ed58dc9f03b7c299e141c3cc3c8031/transformed/core-1.9.0/AndroidManifest.xml:26:5-97
android:name
ADDED from [androidx.core:core:1.9.0] /Users/aln/.gradle/caches/8.13/transforms/3998928c0b9fc73079f29061a0297878/transformed/core-1.9.0/AndroidManifest.xml:26:22-94
ADDED from [androidx.core:core:1.9.0] /Users/aln/.gradle/caches/9.4.1/transforms/b2ed58dc9f03b7c299e141c3cc3c8031/transformed/core-1.9.0/AndroidManifest.xml:26:22-94
uses-permission#com.example.app.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION
ADDED from [androidx.core:core:1.9.0] /Users/aln/.gradle/caches/8.13/transforms/3998928c0b9fc73079f29061a0297878/transformed/core-1.9.0/AndroidManifest.xml:26:5-97
ADDED from [androidx.core:core:1.9.0] /Users/aln/.gradle/caches/9.4.1/transforms/b2ed58dc9f03b7c299e141c3cc3c8031/transformed/core-1.9.0/AndroidManifest.xml:26:5-97
android:name
ADDED from [androidx.core:core:1.9.0] /Users/aln/.gradle/caches/8.13/transforms/3998928c0b9fc73079f29061a0297878/transformed/core-1.9.0/AndroidManifest.xml:26:22-94
ADDED from [androidx.core:core:1.9.0] /Users/aln/.gradle/caches/9.4.1/transforms/b2ed58dc9f03b7c299e141c3cc3c8031/transformed/core-1.9.0/AndroidManifest.xml:26:22-94
meta-data#androidx.lifecycle.ProcessLifecycleInitializer
ADDED from [androidx.lifecycle:lifecycle-process:2.4.1] /Users/aln/.gradle/caches/8.13/transforms/d89f8ae20a95875eed3b361333d04057/transformed/jetified-lifecycle-process-2.4.1/AndroidManifest.xml:31:13-33:52
ADDED from [androidx.lifecycle:lifecycle-process:2.4.1] /Users/aln/.gradle/caches/9.4.1/transforms/fa5338f12be99a5090b21af953bb5682/transformed/jetified-lifecycle-process-2.4.1/AndroidManifest.xml:31:13-33:52
android:value
ADDED from [androidx.lifecycle:lifecycle-process:2.4.1] /Users/aln/.gradle/caches/8.13/transforms/d89f8ae20a95875eed3b361333d04057/transformed/jetified-lifecycle-process-2.4.1/AndroidManifest.xml:33:17-49
ADDED from [androidx.lifecycle:lifecycle-process:2.4.1] /Users/aln/.gradle/caches/9.4.1/transforms/fa5338f12be99a5090b21af953bb5682/transformed/jetified-lifecycle-process-2.4.1/AndroidManifest.xml:33:17-49
android:name
ADDED from [androidx.lifecycle:lifecycle-process:2.4.1] /Users/aln/.gradle/caches/8.13/transforms/d89f8ae20a95875eed3b361333d04057/transformed/jetified-lifecycle-process-2.4.1/AndroidManifest.xml:32:17-78
ADDED from [androidx.lifecycle:lifecycle-process:2.4.1] /Users/aln/.gradle/caches/9.4.1/transforms/fa5338f12be99a5090b21af953bb5682/transformed/jetified-lifecycle-process-2.4.1/AndroidManifest.xml:32:17-78
+1
View File
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
android:theme="@style/AppTheme"
android:label="@string/app_name"
@@ -1,6 +1,7 @@
package com.example.app
import android.os.Bundle
import android.view.View
import android.webkit.WebResourceRequest
import android.webkit.WebResourceResponse
import android.webkit.WebView
@@ -8,39 +9,57 @@ import android.webkit.WebViewClient
import java.io.File
import androidx.appcompat.app.AppCompatActivity
import androidx.webkit.WebViewAssetLoader
import android.widget.ProgressBar
import android.widget.TextView
import android.util.Log
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// show splash layout with progress bar while updater runs
setContentView(R.layout.activity_splash)
val progress = findViewById<ProgressBar>(R.id.splash_progress)
val status = findViewById<TextView>(R.id.splash_status)
val webView = WebView(this)
// Enable remote debugging for WebView so we can inspect JS console via chrome://inspect
WebView.setWebContentsDebuggingEnabled(true)
webView.settings.javaScriptEnabled = true
webView.settings.domStorageEnabled = true
val updater = WebAppUpdater(this)
// prefer to serve files from internal storage (filesDir/webapp), fallback to packaged assets
val internalPath = updater.getLocalWebAppPath()
val assetLoader = WebViewAssetLoader.Builder()
.addPathHandler("/assets/", WebViewAssetLoader.AssetsPathHandler(this))
.addPathHandler("/localweb/", object : WebViewAssetLoader.PathHandler {
override fun handle(path: String): WebResourceResponse? {
// path will look like "/localweb/index.html"
val rel = path.removePrefix("/localweb/")
if (rel.isEmpty()) return null
val f = File(filesDir, "webapp/$rel")
if (!f.exists() || !f.isFile) return null
val mime = when {
f.name.endsWith(".html") -> "text/html"
f.name.endsWith(".js") -> "application/javascript"
f.name.endsWith(".css") -> "text/css"
f.name.endsWith(".png") -> "image/png"
f.name.endsWith(".jpg") || f.name.endsWith(".jpeg") -> "image/jpeg"
else -> "application/octet-stream"
}
return WebResourceResponse(mime, "utf-8", f.inputStream())
}
})
.build()
webView.webViewClient = object : WebViewClient() {
override fun shouldInterceptRequest(view: WebView?, request: WebResourceRequest?): WebResourceResponse? {
if (request == null) return null
// If we have a local webapp in filesDir/webapp, serve files directly from there
val localBase = updater.getLocalWebAppPath()
if (localBase != null) {
val uri = request.url
val path = uri.path ?: ""
// expecting requests like /localweb/... mapped to filesDir/webapp/...
if (path.startsWith("/localweb/")) {
val rel = path.removePrefix("/localweb/")
val f = File(localBase, rel)
@@ -58,25 +77,39 @@ class MainActivity : AppCompatActivity() {
}
}
// fallback to packaged assets via assetLoader
return assetLoader.shouldInterceptRequest(request.url)
}
}
// Start update in background; when finished, reload WebView to pick up local files
updater.checkAndUpdate {
// Start update; show progress on splash. Only proceed to replace splash with WebView when updater finishes.
updater.checkAndUpdate(onComplete = {
runOnUiThread {
// replace splash with webview
setContentView(webView)
val local = updater.getLocalWebAppPath()
if (local != null) {
// if we have a local copy, load it via mapped origin
webView.loadUrl("https://appassets.androidplatform.net/localweb/index.html")
// prefer serving over the mapped HTTPS origin so the page has a secure origin
val idx = File(local, "index.html")
if (idx.exists() && idx.isFile) {
webView.loadUrl("https://appassets.androidplatform.net/localweb/index.html")
} else {
Log.w("MainActivity", "local webapp index.html missing, falling back to packaged assets")
webView.loadUrl("https://appassets.androidplatform.net/assets/index.html")
}
} else {
webView.loadUrl("https://appassets.androidplatform.net/assets/index.html")
}
}
}
// show WebView immediately (it will navigate when updater completes)
setContentView(webView)
}, onProgress = { downloaded, total ->
runOnUiThread {
if (total > 0) {
val pct = ((downloaded * 100) / total).toInt()
progress.progress = pct
status.text = "Pobieranie: $pct%"
} else {
status.text = "Pobieranie: ${downloaded / 1024} KB"
}
}
})
}
}
@@ -1,6 +1,9 @@
package com.example.app
import android.content.Context
import android.net.ConnectivityManager
import android.net.NetworkCapabilities
import android.os.Build
import android.util.Log
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
@@ -11,56 +14,48 @@ import java.io.FileOutputStream
import java.net.HttpURLConnection
import java.net.URL
import java.util.zip.ZipInputStream
import org.json.JSONObject
/**
* Simple updater that checks a remote JSON for latest version and zip URL,
* downloads and unpacks into internal storage under filesDir/webapp.
* This is intentionally minimal — adapt URLs and error handling as needed.
* Updater that checks network availability and downloads a release zip from
* https://edu.aln.webd.pl/releases/latest.zip, then unpacks it into
* filesDir/webapp so the app can serve it as its local web content.
*
* Notes/assumptions:
* - Packaged APK assets are read-only; we unpack into internal storage.
* - We use HTTP HEAD to obtain an ETag or Last-Modified header and store
* that value at filesDir/webapp/.version to avoid unnecessary downloads.
* - If the server does not provide ETag/Last-Modified we'll fall back to
* always downloading when online.
*/
class WebAppUpdater(private val context: Context) {
private val TAG = "WebAppUpdater"
// control URL on your server; update if your JSON lives at a different path
private val controlUrl = "https://edu.aln.webd.pl/app/latest.json"
private val zipUrl = "https://edu.aln.webd.pl/releases/latest.zip"
private val targetDirName = "webapp"
fun checkAndUpdate(onComplete: (() -> Unit)? = null) {
fun checkAndUpdate(onComplete: (() -> Unit)? = null, onProgress: ((downloaded: Long, total: Long) -> Unit)? = null) {
CoroutineScope(Dispatchers.IO).launch {
try {
val conn = URL(controlUrl).openConnection() as HttpURLConnection
conn.connectTimeout = 5000
conn.readTimeout = 10000
conn.requestMethod = "GET"
if (conn.responseCode != 200) {
Log.w(TAG, "control.json fetch failed: ${conn.responseCode}")
onComplete?.invoke()
return@launch
}
val text = conn.inputStream.bufferedReader().use { it.readText() }
// expecting: { "version": "1.0.1", "zip": "https://.../app.zip" }
val json = JSONObject(text)
val zipUrl = if (json.has("zip")) json.getString("zip") else null
val version = if (json.has("version")) json.getString("version") else null
if (zipUrl.isNullOrEmpty() || version.isNullOrEmpty()) {
Log.w(TAG, "invalid control.json: $text")
if (!hasNetwork()) {
Log.i(TAG, "no wifi available, skipping update")
onComplete?.invoke()
return@launch
}
val remoteVersion = getRemoteVersion(zipUrl)
val versionFile = File(context.filesDir, "$targetDirName/.version")
val currentVersion = if (versionFile.exists()) versionFile.readText().trim() else ""
if (currentVersion == version) {
Log.i(TAG, "webapp up-to-date: $version")
if (!remoteVersion.isNullOrEmpty() && remoteVersion == currentVersion) {
Log.i(TAG, "webapp up-to-date (remote version matches)")
onComplete?.invoke()
return@launch
}
// download zip
// download zip to temp file
val tmpZip = File.createTempFile("webapp", ".zip", context.cacheDir)
downloadToFile(zipUrl, tmpZip)
downloadToFile(zipUrl, tmpZip, onProgress)
// unpack to temp dir then move
// unpack into temp dir then atomically replace existing webapp dir
val tmpDir = File.createTempFile("webapptemp", "", context.cacheDir)
tmpDir.delete()
tmpDir.mkdirs()
@@ -68,10 +63,22 @@ class WebAppUpdater(private val context: Context) {
val targetDir = File(context.filesDir, targetDirName)
if (targetDir.exists()) targetDir.deleteRecursively()
tmpDir.renameTo(targetDir)
if (!tmpDir.renameTo(targetDir)) {
// fallback to copy if rename fails
tmpDir.copyRecursively(targetDir, overwrite = true)
tmpDir.deleteRecursively()
}
versionFile.writeText(version)
Log.i(TAG, "webapp updated to $version")
if (!remoteVersion.isNullOrEmpty()) {
versionFile.parentFile?.mkdirs()
versionFile.writeText(remoteVersion)
} else {
// store a simple timestamp to indicate we have pulled something
versionFile.parentFile?.mkdirs()
versionFile.writeText(System.currentTimeMillis().toString())
}
Log.i(TAG, "webapp updated")
} catch (e: Exception) {
Log.w(TAG, "update failed", e)
} finally {
@@ -80,17 +87,65 @@ class WebAppUpdater(private val context: Context) {
}
}
private fun downloadToFile(urlStr: String, outFile: File) {
private fun hasNetwork(): Boolean {
val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as? ConnectivityManager
?: return false
val active = cm.activeNetwork ?: return false
val caps = cm.getNetworkCapabilities(active) ?: return false
// Only allow updates when on Wi-Fi
return caps.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)
}
private fun getRemoteVersion(urlStr: String): String? {
return try {
val url = URL(urlStr)
val conn = (url.openConnection() as HttpURLConnection).apply {
connectTimeout = 5000
readTimeout = 5000
requestMethod = "HEAD"
// some servers require a User-Agent
setRequestProperty("User-Agent", "Matma-Updater/1.0")
}
conn.connect()
if (conn.responseCode / 100 != 2) return null
// prefer ETag then Last-Modified
val etag = conn.getHeaderField("ETag")
if (!etag.isNullOrEmpty()) return etag
val lm = conn.getHeaderField("Last-Modified")
if (!lm.isNullOrEmpty()) return lm
null
} catch (e: Exception) {
Log.w(TAG, "failed to get remote version", e)
null
}
}
private fun downloadToFile(urlStr: String, outFile: File, onProgress: ((downloaded: Long, total: Long) -> Unit)? = null) {
val url = URL(urlStr)
val conn = url.openConnection() as HttpURLConnection
conn.connectTimeout = 5000
conn.readTimeout = 20000
conn.requestMethod = "GET"
conn.connect()
if (conn.responseCode != 200) throw RuntimeException("download failed: ${conn.responseCode}")
if (conn.responseCode / 100 != 2) throw RuntimeException("download failed: ${'$'}{conn.responseCode}")
val total = conn.contentLengthLong.takeIf { it > 0 } ?: -1L
conn.inputStream.use { input ->
FileOutputStream(outFile).use { fos ->
input.copyTo(fos)
val buffer = ByteArray(8 * 1024)
var bytesRead: Int
var downloaded = 0L
while (true) {
bytesRead = input.read(buffer)
if (bytesRead <= 0) break
fos.write(buffer, 0, bytesRead)
downloaded += bytesRead
try {
onProgress?.invoke(downloaded, total)
} catch (_: Exception) {
// ignore progress handler exceptions
}
}
}
}
}
@@ -98,13 +153,29 @@ class WebAppUpdater(private val context: Context) {
private fun unzipToDir(zipFile: File, targetDir: File) {
ZipInputStream(BufferedInputStream(zipFile.inputStream())).use { zis ->
var entry = zis.nextEntry
val targetCanonical = targetDir.canonicalFile
while (entry != null) {
val out = File(targetDir, entry.name)
// sanitize entry name to avoid absolute paths and backslashes
var name = entry.name.replace('\\', '/').trimStart('/')
// ignore suspicious entries
if (name.contains("../") || name.contains("..\\")) {
entry = zis.nextEntry
continue
}
val outFile = File(targetDir, name)
// ensure the output is inside targetDir
val outCanonical = outFile.canonicalFile
if (!outCanonical.path.startsWith(targetCanonical.path)) {
entry = zis.nextEntry
continue
}
if (entry.isDirectory) {
out.mkdirs()
outCanonical.mkdirs()
} else {
out.parentFile?.mkdirs()
FileOutputStream(out).use { fos ->
outCanonical.parentFile?.mkdirs()
FileOutputStream(outCanonical).use { fos ->
zis.copyTo(fos)
}
}
@@ -0,0 +1,34 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
android:padding="24dp">
<ImageView
android:id="@+id/splash_logo"
android:layout_width="120dp"
android:layout_height="120dp"
android:src="@mipmap/ic_launcher"
android:contentDescription="splash logo" />
<TextView
android:id="@+id/splash_status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="Ładowanie..."
android:textAppearance="?android:attr/textAppearanceMedium" />
<ProgressBar
android:id="@+id/splash_progress"
style="@android:style/Widget.ProgressBar.Horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:indeterminate="false"
android:max="100"
android:progress="0" />
</LinearLayout>