DrDragoN
@DrDragoN
Программист

Как установить чужое приложение после скачивания?

Пишу приложение, в нем есть кнопки для установки дополнительных APK, чтобы корректно всё работало. С помощью DownloadManager скачиваю дополнительное приложение и после успешной закачки в BroadcastReceiver, пытаюсь запустить установку. Но, система выдает что "Не удалось обработать пакет". Что я делаю не так? И вопрос еще один, после выдачи всех разрешений, на одном из телефонов стало появятся предупреждение, что приложение с вирусом и его надо удалить, что не так?

Установка:
File directory = context.getExternalFilesDir( Environment.DIRECTORY_DOWNLOADS );
                File fileApkToInstall = new File( directory, APP + ".apk" );
                Uri apkUri = FileProvider.getUriForFile( context, PACKET_NAME + ".provider", fileApkToInstall );
                Intent install = new Intent( Intent.ACTION_INSTALL_PACKAGE );
                install.setData( apkUri );
                install.setFlags( Intent.FLAG_GRANT_READ_URI_PERMISSION );
                install.putExtra( Intent.EXTRA_RETURN_RESULT, true );
                install.putExtra( Intent.EXTRA_NOT_UNKNOWN_SOURCE, true );
                startActivity( install );


...
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" tools:ignore="ScopedStorage"/>
    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
    <uses-permission android:name="android.permission.INSTALL_PACKAGES" tools:ignore="ProtectedPermissions"/>
...
<application
...
<provider
                android:name="androidx.core.content.FileProvider"
                android:authorities="${applicationId}.provider"
                android:exported="false"
                android:grantUriPermissions="true">
            <meta-data
                    android:name="android.support.FILE_PROVIDER_PATHS"
                    android:resource="@xml/provider_paths" />
        </provider>
...
</application>


@xml/provider_paths
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="external" path="." />
</paths>
  • Вопрос задан
  • 372 просмотра
Пригласить эксперта
Ответы на вопрос 1
Steel_Balls
@Steel_Balls
0L3QsNGH0LjQvdCw0Lsg0YEgQkFTSUMg0L3QsCDQo9Ca0J3Qpi
Это защита от вирусов на двух уровнях - 1. на уровне оболочки и2- на уровне самой системы Android.
Нужно вручную давать разрешения для установки скачиваемых APK, подтверждать, что это не вирус, давать согласие на установку, запуск и запрет проверки на вирусы.
Просто так тебе не получится твой вирус установить на устройство - пользователь должен намеренно это сделать сам.
Однако, есть класс приложений, у которых есть практически все права - это MDM, такие как Citrix, AirWatch и другие
https://mobidev.biz/blog/mobile-device-management-...
https://www.apriorit.com/dev-blog/473-how-to-build...
Возможно, нужно копать в этом направлении
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы