7

対象の apk のパッケージ名が既にわかっている場合、プログラムの正確なファイル名を取得したいと考えています。たとえば、apk のパッケージ名 (com.packagename) がわかっている場合、そのパッケージの正確なパスとファイル名を取得するにはどうすればよいですか? ところで、私は MY APK の場所だけを取得したくありません。適用するパッケージ名の場所が必要です。SystemTuner pro はこれを行うことができるので、それが可能であることはわかっていますが、方法はわかりません。

みんなありがとう!

4

4 に答える 4

7
/**
 * Get the apk path of this application.
 * @param context any context (e.g. an Activity or a Service)
 * @return full apk file path, or null if an exception happened (it should not happen)
 */
public static String getApkName(Context context) {
    String packageName = context.getPackageName();
    PackageManager pm = context.getPackageManager();
    try {
        ApplicationInfo ai = pm.getApplicationInfo(packageName, 0);
        String apk = ai.publicSourceDir;
        return apk;
    } catch (Throwable x) {
    }
    return null;
}

編集この場合 の防御catch (Throwable x)最初は、 Checked Exceptions が悪であることがよく知られています。次に、Android の将来のバージョンで何が起こるかを予測することはできません。チェックされた例外をランタイム例外にラップして再スローする傾向がすでにあります。(そして、過去には考えられなかった愚かなことをする傾向。) エラーの子に関しては、まあ、パッケージ マネージャーが実行中の apk を見つけられない場合、エラーがスローされるような問題です。おそらく最後の行は

    } catch (Throwable x) {
        return null;
    }

しかし、テストせずに作業コードを変更することはありません。

于 2015-07-21T09:48:44.607 に答える
4

PackageManager.getPackageInfo()はパッケージに関する情報を返し、PackageInfo.applicationInfoフィールドにはアプリケーションに関する必要な情報が含まれています。

于 2013-06-06T22:30:51.103 に答える