11

/sdcard/download/ に保存されているインストーラーのファイル名を取得できますか? インストールしたアプリ、apkファイル名から取得したい。特に非市場アプリで簡単に行う方法はありますか?

4

2 に答える 2

3

The better way is definitely to include the version string in the manifest. This is really the only reliable (and professional) method. Android doesn't store the name of the file containing the APK anywhere, so there isn't a way that you can get it.

Theoretically you could probably build something using a FileObserver, that watched file creation in certain directories and every time a file was created with the extension .apk you could open the file, extract the manifest, find the package name of the APK and then store this along with the filename in some persistent storage. Then, when you need get the version information, you can look in the persisten storage to get the file name matching the package name you need.

Of course, this would only work if your app was installed on the device before the other APK files were downloaded/installed. This wouldn't work to find out the filename of your own application.

于 2015-12-07T12:58:06.680 に答える
3

うーん、sdcard またはダウンロード フォルダーの意味がわかりませんが、システムの /data ディレクトリで apk パスを取得できます。

コマンドライン:

$ adb shell pm list packages | grep mk.trelloapp
package:mk.trelloapp
$ adb shell pm path mk.trelloapp
package:/data/app/mk.trelloapp-1/base.apk

またはあなたのAndroidアプリケーションコードから:(単にプロセスを実行する)

        Process exec = Runtime.getRuntime().exec("pm path mk.trelloapp");

        exec.waitFor();

        InputStream inputStream = exec.getInputStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));

        StringBuilder builder = new StringBuilder();
        String line = null;
        while( ( line = br.readLine()) != null ) {
            builder.append(line);
        }

        String commandOutput = builder.toString();

上記のコードは、「package:/data/app/mk.trelloapp-1/base.apk」を含む文字列を提供するだけです。

/data ディレクトリのパスを取得すると、インストール時に android パッケージが /data ディレクトリにコピーされるため、他のディレクトリ (削除されていないと仮定) で同じ (類似した) ファイルを検索しようとする場合があります。

于 2015-12-10T06:50:05.800 に答える