2011-12-30 17 views
7

Czy istnieje sposób na odzyskanie informacji o podpisie apk w środowisku wykonawczym?Pobieranie podpisu apk w środowisku wykonawczym dla Androida

Na przykład mam tę samą aplikację podpisaną z 2 różnymi sygnaturami: app-1.apk i app-2.apk i chciałbym móc odróżnić obie apk w czasie wykonywania. Czy to jest możliwe?

Moim celem jest wdrożenie systemu licencjonowania przy użyciu zewnętrznego serwera i na podstawie kodu wersji aplikacji i podpisu.

Odpowiedz

8

Dostęp do podpisu apk można uzyskać za pomocą programu PackageManager. Flaga PackageInfo zdefiniowana w Menedżerze pakietów zwraca informacje o podpisach zawartych w pakiecie.

Signature[] sigs = context.getPackageManager().getPackageInfo(context.getPackageName(),PackageManager.GET_SIGNATURES).signatures;  
for (Signature sig : sigs) 
{ 
    Log.i("App", "Signature : " + sig.hashCode()); 
} 

http://developer.android.com/reference/android/content/pm/PackageManager.html

+3

prawej, z wyjątkiem tego, co wywołań API podpis "jest rzeczywiście _certificate_ podpisanie. Wywołaj 'toByteArray()', aby uzyskać certyfikat nieprzetworzony. Ponadto 'hashCode()' nie kupuje zbyt wiele, musisz użyć 'MessageDigest', aby obliczyć wartość mieszania certyfikatu dla porównania. –

+0

@NikolayElenkov To może być stary post, ale potrzebowałem tego kodu zaimplementowanego. Jaka jest różnica między certyfikowanym certyfikatem a surowym certyfikatem? Kiedy używam Twojej metody 'toByteArray()' zamiast 'hashCode()' moja suma kontrolna 'MD5' zmienia się za każdym razem, gdy ponownie uruchamiam' .apk', podczas gdy użycie 'hashCode()' zachowuje stabilność, dopóki nie zrekompiluję aplikacji. Chcę tylko zidentyfikować magazyn kluczy używany do podpisywania '.apk'. – Synaero

+1

'hashCode()' nie zwraca sumy kontrolnej MD5, jest to mniej więcej losowa wartość identyfikująca obiekt w środowisku wykonawczym. użyj 'MessageDigest.getInstance (" MD5 "). digest (sigs [0] .toByteArray())'. BTW, nie ma sensu identyfikować "magazynu kluczy", trzeba zidentyfikować klucz/certyfikat podpisu. –

2

To może być inne podejście, ale dlaczego po prostu nie zaimplementujesz niestandardowego uprawnienia, czyli podpisu? Następnie możesz użyć menedżera pakietów (lub audycji), aby dowiedzieć się, czy pozwolenie zostało przyznane.

Jeśli tak, to oba podpisy są takie same, jeśli nie, są różne.

Powiązane problemy