15

アプリに apk を自動的にインストールさせようとしています。これは api<24 で問題なく動作します。しかし、24 の場合、それは失敗しています。Android には追加のセキュリティが実装されています。

Android 7.0 を対象とするアプリの場合、Android フレームワークは StrictMode API ポリシーを適用し、アプリの外部に file:// URI を公開することを禁止します。ファイル URI を含むインテントがアプリを離れると、アプリは FileUriExposedException 例外で失敗します。

だから私はこれを試しました:

    Uri myuri;
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N){
        myuri = Uri.parse("file://"+outapk);
    } else {
        File o = new File(outapk);
        myuri = FileProvider.getUriForFile(con, con.getApplicationContext().getPackageName() + ".provider", o);
    }
    Intent promptInstall = new Intent(Intent.ACTION_VIEW).setDataAndType(myuri,"application/vnd.android.package-archive");
    con.startActivity(promptInstall);

しかし、致命的な例外が発生します:

com.android.packageinstaller "Caused by: java.lang.SecurityException: Permission Denial: opening provider android.support.v4.content.FileProvider from ProcessRecord{b42ee8a 6826:com.android.packageinstaller/u0a15} (pid=6826, uid=10015) that is not exported from uid 10066". 

マニフェストに export=true があります。

問題は、packageinstaller が content:// uri を使用できないことです。

アプリがapi24でapkをプログラム的にインストールできるようにする方法はありますか?

4

8 に答える 8

4

Oreo の場合、AndroidManifast にパーミッションを追加します

<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
于 2018-08-24T09:29:33.350 に答える