4

良い一日!
私はこのコードを試しました:

PackageInfo info = mContext.getPackageManager().getPackageArchiveInfo(absolute_apk_name, PackageManager.GET_SIGNATURES);
        if (info != null)
        {
            Signature[] sig = info.signatures;
            if (sig != null)
                sigstring = new String(sig[0].toChars());
        }

しかしinfo.signatures == null、「なぜ?」absolute_apk_name
の ファイルが存在します。Android 2.1 を確認しました

更新:

absolute_apk_name = "/data/data/ru.UseIT.SimpleFormsLauncher/files/SimpleFormsGeneral.apk"  

apk はフラグ付きで作成されましたContext.MODE_WORLD_READABLE|Context.MODE_WORLD_WRITEABLE

しかし、このコードを実行すると

Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.setDataAndType(Uri.fromFile(new File(absolute_apk_name )), "application/vnd.android.package-archive");
        mContext.startActivity(intent);

インストールされました。

4

3 に答える 3

1

Android のソースを確認したところ、Android のバージョンが 2.3.7 以下の場合、PackageManager#getPackageArchiveInfo(String, int) に署名が含まれていないことがわかりました。

以下のリンクをご覧ください。

http://tools.oesf.biz/android-2.3.7_r1.0/xref/frameworks/base/core/java/android/content/pm/PackageManager.java#1891

http://tools.oesf.biz/android-4.0.3_r1.0/xref/frameworks/base/core/java/android/content/pm/PackageManager.java#2121

于 2014-06-17T08:33:13.560 に答える
1

これは Android システムのバグです。この https://code.google.com/p/android/issues/detail?id=9151#c8を参照してください。 このバグは 4.0 以降で修正されています。

于 2014-01-06T02:47:52.527 に答える
-1

何を達成しようとしているのかよくわかりませんが、絶対 apk 名/パスを使用するのは正しくありません。パッケージ名が必要です。以下を使用して署名を取得できました。「com.android.chrome」を必要なアプリのパッケージ名に置き換えるだけです。

final PackageInfo pkgInfo = packageManager.getPackageInfo(
                    "com.android.chrome", PackageManager.GET_SIGNATURES);
final Signature[] signatures = pkgInfo.signatures;
于 2013-07-17T08:53:29.487 に答える