# Code läuft unter SDK 27 aber nicht SDK 30



## wer112 (27. Jan 2021)

Ich habe einen DownloadManager gefunden, wo man Dateien/Apps/Audio downloaden kann. Leider muss ich feststellen, dass dies nicht möglich ist, außer man stellt die tragedSDKVersion auf 27. Ich finde nirgendwo einen Grund, wiso dass nur bei 27 funktioniert. Ich benötige dringend eure Hilfe.

Meine Fragen:

1. Warum geht es nicht, außer wenn man die TragedSDKVersion auf 27 stellt und nicht z.B 30
2. Was kann ich machen, dass es auf jedes Smartphone funktioniert?

Ich schicke euch mal den Code. Dieser geht, solange wie es auf 27 ist.


```
String url = "http://www. ..... .de/appsordner/app-release.apk";

        DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
        request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE);
        request.setTitle("Download");
        request.setDescription("APK Downloading...");
        request.allowScanningByMediaScanner();
        request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
        request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "app-release.apk");

        DownloadManager manager = (DownloadManager)getSystemService(Context.DOWNLOAD_SERVICE);
        manager.enqueue(request);
```

Und das ist das Mainifest:


```
<uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.INSTALL_PACKAGES"
        tools:ignore="ProtectedPermissions" />
    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>



    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.AppCompat.Light.NoActionBar">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
```

Und das ist die App BUILD:


```
apply plugin: 'com.android.application'

android {
    compileSdkVersion 30
    buildToolsVersion "30.0.1"

    defaultConfig {
        applicationId ".............."
        minSdkVersion 23
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: "libs", include: ["*.jar"])
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'

}
```

Ich hoffe, das ihr mir helfen könnt, dass es auf allen Smartphones funktioniert mit der aktuellen targetSDKversion 30.

Ich bin für jede Hilfe sehr dankbar!


----------



## mrBrown (28. Jan 2021)

Wie äußert sich denn das "funktioniert nicht"? Kompiliert es nicht oder gibt es Laufzeitfehler, und in beiden Fällen, wie sieht der Fehler aus?


----------



## LimDul (28. Jan 2021)

Ansonsten generell mal auch die SKDs dazwischen ausprobieren, wenn ich das richtig lese ist SDK 27 Android 8 und SDK 30 Android 11. Das heißt, du solltest mal bei Android lesen, was sich da alles geändert hat. Für SDK 29->30 findet man z.B. das der Zugriff auf folgende Sachen blockiert wurde: https://developer.android.com/about/versions/11/non-sdk-11#new-blocked

Das sind aber nur die Änderungen von 29->30. Du brauchst auch die Änderungen von 27->28 und 28->29.


----------



## LimDul (28. Jan 2021)

Was man übrigens findet:



			https://developer.android.com/reference/android/Manifest.permission#INSTALL_PACKAGES
		



> public static final String INSTALL_PACKAGES
> Allows an application to install packages.
> 
> *Not for use by third-party applications.*
> ...


Sollte aber eher nicht die Ursache sein, aber die eigentlich darf eine App diese Rechte nicht fordern.


----------



## wer112 (28. Jan 2021)

mrBrown hat gesagt.:


> Wie äußert sich denn das "funktioniert nicht"? Kompiliert es nicht oder gibt es Laufzeitfehler, und in beiden Fällen, wie sieht der Fehler aus?


Wenn ich die App auf t30 habe oder 27 oder 28 bzw. Alles unter ca. 26, dann drücke ich auf den Button und oben in den Benachrichtigung steht sofort fehlgeschlagen. Der DownloadManger kann das nur mit t27 downloaden die Sachen, sonst kommt fehlgeschlagen.


----------



## wer112 (28. Jan 2021)

LimDul hat gesagt.:


> Was man übrigens findet:
> 
> 
> 
> ...


Das ist ein anderer Teil, der später hinzugefügt wurde ist. Hat nix damit zu tun, da das Problem ja da schon da war, beim einfachem Download....


----------



## wer112 (28. Jan 2021)

LimDul hat gesagt.:


> Ansonsten generell mal auch die SKDs dazwischen ausprobieren, wenn ich das richtig lese ist SDK 27 Android 8 und SDK 30 Android 11. Das heißt, du solltest mal bei Android lesen, was sich da alles geändert hat. Für SDK 29->30 findet man z.B. das der Zugriff auf folgende Sachen blockiert wurde: https://developer.android.com/about/versions/11/non-sdk-11#new-blocked
> 
> Das sind aber nur die Änderungen von 29->30. Du brauchst auch die Änderungen von 27->28 und 28->29.


Das hilft mir nicht und von einem DownloadManger steht nirgendwo. Ich hatte damals ein Problem, mit Wifi und da geht man einfach z.B. auf die developer Android seite  zum DownloadManger und sa wird es erklärt. Dort befindet sich auch der Hinweis, bis welche termin funktioniert  und ab wann es "geblockt" ist. In diesem Fall habe ich nix gesehen. Die Frage ist, warum geht es nicht unter 27??? Z.B. warum geht es nicht mit 23 oder 24??? Ich denke nicht, das der DownloadManger nur für Api 27 entwickelt wurden ist...


----------



## LimDul (28. Jan 2021)

Ich hab selber von Android-Entwicklung keine Ahnung -. aber hilfreich wäre:

Was ist der DownloadManager? Ein Komponente von Android? Wenn ja, wo ist die dokumentiert?
Eine Third-Party Library? Wenn ja, wo ist die dokumentiert?

Wenn Fehlgeschlagen steht => Debuggen und logs auswerten, was fehlschlägt. In der Entwicklung ist man (egal wofür man entwickelt) drauf angewiesen, dass man auch unter die Haube (=In Logs, Debug etc.) schauen kann.


----------



## kneitzel (28. Jan 2021)

LimDul hat gesagt.:


> Was ist der DownloadManager? Ein Komponente von Android? Wenn ja, wo ist die dokumentiert?











						DownloadManager  |  Android Developers
					






					developer.android.com
				




Aber das ändert nichts daran, dass die Aussage vom TE bezüglich Fehlersuche einfach nicht ausreicht:


wer112 hat gesagt.:


> dann drücke ich auf den Button und oben in den Benachrichtigung steht sofort fehlgeschlagen.


Du machst etwas, das fehlschlägt und Du reagierst darauf, dass Du eine Benachrichtigung anzeigst? Oder was genau passiert da? Du bist generell sehr schwer zu verstehen finde ich.


----------



## wer112 (28. Jan 2021)

Das Video zeigt wie es prima mit t27 funktioniert. Wenn ich es auf 30 habe die termin, dann steht da nicht Download abgeschlossen, sondern Download fehlgeschlagen. Und dann lädt es nicht runter.


----------



## LimDul (28. Jan 2021)

Also, entweder du bist Nutzer ein Anwendung => An die wenden, die die Anwendung entwickeln
Oder du entwickelst selber => Dann benötigt so eine Meldung der Form "geht nicht" die möglichst exakte Code stelle die nicht geht und falls dort irgendwelche Exceptions geworfen werden die ebenfalls. Ein "An der Oberfläche kommt fehlgeschlagen" reicht da nicht. Sprich du musst mal die Anwendung, die du ja gerade baust, debuggen und schauen an welcher Stelle es exakt mit welchem technischen Grund (ich würde ad-hoc auf eine Exception tippen, die gefangen und in eine Nachricht umgewandelt wird tippen). Ansonsten ist das reines raten unserseits.


----------



## kneitzel (28. Jan 2021)

Was für ein Video?

Und hast Du schon die logs auf dem System geprüft? Auch der DownloadManager sollte da entsprechende Informationen loggen.

Oder Du kannst die Id, die enqueue zurücl gibt, merken. Dann kannst Du mittels query einen Cursor bekommen mit den Details. Ich habe jetzt nicht geprüft, was da der downloadmanager im Detail zurück gibt.

Du prüfst immer in der gleichen VM / dem gleichen Smartphone? Oder hast Du unterschiedliche Testsysteme? Ich würde erwarten, dass der DownlaodManager selbst die Prüfung auf valide Downloads durchführt, aber evtl. macht das SDK da auch noch irgendwas. Evtl. gibt es in der neueren SDK Version eine Prüfung, was herunter geladen wird. Da Du ja eine apk Datei herunter laden willst, kann es hier ggf. zu Problemen kommen. Aber das würde ich eigentlich innerhalb von Android / dem DownloadManager erwarten. (Android hat halt Settings bekommen a.la. "download apks from unsecure locations" (oder so ähnlich).


----------



## kneitzel (28. Jan 2021)

LimDul hat gesagt.:


> Ein "An der Oberfläche kommt fehlgeschlagen" reicht da nicht. Sprich du musst mal die Anwendung, die du ja gerade baust, debuggen und schauen an welcher Stelle es exakt mit welchem technischen Grund (ich würde ad-hoc auf eine Exception tippen, die gefangen und in eine Nachricht umgewandelt wird tippen). Ansonsten ist das reines raten unserseits.


Ich fürchte, er sieht nicht mehr. Er gibt nur einen Download Request an den DownloadManager so wie ich es verstehe. Damit obliegt es komplett der Systemkomponente DownloadManager. Der Download wird also nicht von seiner App selbst durchgeführt.


----------



## LimDul (28. Jan 2021)

kneitzel hat gesagt.:


> Ich fürchte, er sieht nicht mehr. Er gibt nur einen Download Request an den DownloadManager so wie ich es verstehe. Damit obliegt es komplett der Systemkomponente DownloadManager. Der Download wird also nicht von seiner App selbst durchgeführt.


Ok, so tief bin ich in der Materie nicht drin.


----------



## wer112 (28. Jan 2021)

kneitzel hat gesagt.:


> Ich fürchte, er sieht nicht mehr. Er gibt nur einen Download Request an den DownloadManager so wie ich es verstehe. Damit obliegt es komplett der Systemkomponente DownloadManager. Der Download wird also nicht von seiner App selbst durchgeführt.








						DownloadManger  – Google Drive
					






					drive.google.com
				




Dort sind die zwei Videos, wo es funktioniert(nur bei t27) und das andere, wie es nicht funktioniert(bei t30 muss eigentlich immer t30 sein)

Ich habe die Log Daten genommen und die DownloadManager Rausgefiltert. Ich habe ein Teil des Logos in die Datei gepackt und die URL sowie 📦 auf hhhh geändert....

Somit könnt ihr was sehen oder wissen, was ich nicht weiß  bzw. Wie ich das Problem löse.


----------



## mrBrown (28. Jan 2021)

Vermutlich ist’s schon: „Stop requested with status BAD_REQUEST: Cleartext traffic not permitted for package com.hhhhhh.hhhh: http://www.hhhhh.de/...“









						How to solve Android P DownloadManager stopping with "Cleartext HTTP traffic to 127.0.0.1 not permitted"?
					

I have already defined a custom network security config and included it in my manifest as recommended here  res/xml/network_security_config.xml:    <?xml version="1.0" encoding="utf-8"?>   <




					stackoverflow.com


----------



## wer112 (28. Jan 2021)

mrBrown hat gesagt.:


> Vermutlich ist’s schon: „Stop requested with status BAD_REQUEST: Cleartext traffic not permitted for package com.hhhhhh.hhhh: http://www.hhhhh.de/...“
> 
> 
> 
> ...


Was willst du damit sagen? Der letzte Kommentar auf der Seite hat eine http angegeben, was bei mir der Fall ist. Der Code funktioniert ja, aber nur wenn die termin auf 27 ist... Was soll ich jetzt tun, damit es bei t30 ebenfalls funktioniert?


----------



## mrBrown (28. Jan 2021)

Du musst bei Stackoverflow auch die Antworten angucken...









						How to solve Android P DownloadManager stopping with "Cleartext HTTP traffic to 127.0.0.1 not permitted"?
					

I have already defined a custom network security config and included it in my manifest as recommended here  res/xml/network_security_config.xml:    <?xml version="1.0" encoding="utf-8"?>   <




					stackoverflow.com


----------

