2013-03-19 2 views
4

Добрый день!
Я попробовал этот код:Почему подписи имеют значение NULL?

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

UPD:

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

APK был создан с флагами Context.MODE_WORLD_READABLE|Context.MODE_WORLD_WRITEABLE

Но если Exec этот код

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); 

Он был установлен.

+0

@DrinkJavaCodeJava, я updete вопрос – andreich

+0

Попробуйте некоторые другие флаги и посмотреть, что происходит. – DrinkJavaCodeJava

+0

@DrinkJavaCodeJava, какие еще флаги? APPEND? – andreich

ответ

1

Я проверил Android источник, и получается, что PackageManager # getPackageArchiveInfo (String, Int) не включают подписи, если версия Android 2.3.7 и меньше.

См. Ниже ссылки.

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

0

Я не совсем уверен, что вы пытаетесь достичь, но использование абсолютного имени/пути apk неверно, вам нужно имя пакета. Я смог получить подписи, используя следующее, просто замените «com.android.chrome» на имя пакета требуемого приложения.

final PackageInfo pkgInfo = packageManager.getPackageInfo(
        "com.android.chrome", PackageManager.GET_SIGNATURES); 
final Signature[] signatures = pkgInfo.signatures; 
+0

Я пытаюсь получить подпись другого apk, не установлен – andreich

+0

, может быть, использовать openssl для получения сертификата? http://stackoverflow.com/questions/4324120/how-to-view-the-identity-of-person-who-signed-the-apk-on-android-device – scottyab

+0

Ждите, что вы делаете это на устройстве? и пытается проверить подпись apk перед установкой? – scottyab

Смежные вопросы