2011-12-30 63 views
7

Có cách nào để truy xuất thông tin về chữ ký apk khi chạy không?Lấy chữ ký apk khi chạy cho Android

Ví dụ: Tôi có cùng một ứng dụng được ký với 2 chữ ký khác nhau: app-1.apk và app-2.apk và tôi muốn có thể phân biệt cả hai apk trong thời gian chạy. Điều đó có thể không?

Mục tiêu của tôi là triển khai hệ thống cấp phép bằng máy chủ bên ngoài và dựa trên mã phiên bản của ứng dụng và chữ ký.

Trả lời

8

Bạn có thể truy cập chữ ký apk bằng PackageManager. Cờ PackageInfo được xác định trong Trình quản lý gói trả về thông tin về các chữ ký được bao gồm trong gói.

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

Đúng vậy, ngoại trừ những gì các cuộc gọi API 'chữ ký' thực sự là _certificate_ ký. Gọi 'toByteArray()' để lấy chứng chỉ thô. Ngoài ra, 'hashCode()' không mua cho bạn nhiều, bạn cần sử dụng 'MessageDigest' để tính giá trị băm chứng chỉ để so sánh. –

+0

@NikolayElenkov Đây có thể là một bài đăng cũ nhưng tôi cần mã này được triển khai. Sự khác nhau giữa việc ký cert và cert thô là gì? Khi tôi sử dụng phương thức 'toByteArray()' thay vì 'hashCode()' my 'MD5' checksum thay đổi mỗi khi tôi chạy' .apk' một lần nữa trong khi chỉ sử dụng 'hashCode()' giữ nó ổn định trừ khi tôi biên dịch lại ứng dụng. Những gì tôi muốn là để xác định keystore được sử dụng để ký '.apk'. – Synaero

+1

'hashCode()' không trả về tổng kiểm tra MD5, đó là một giá trị ngẫu nhiên nhiều hơn hoặc ít hơn xác định đối tượng trong thời gian chạy. sử dụng 'MessageDigest.getInstance (" MD5 "). digest (sigs [0] .toByteArray())'. BTW, không có điểm nào trong việc xác định 'kho khóa', bạn cần xác định khóa/chứng chỉ ký. –

2

Đây có thể là một cách tiếp cận khác, nhưng tại sao bạn không thực hiện quyền tùy chỉnh, đó là chữ ký dựa trên? Sau đó, bạn có thể sử dụng trình quản lý gói (hoặc một chương trình phát sóng) để tìm hiểu xem quyền đó có được cấp hay không.

Nếu có, thì cả hai chữ ký đều giống nhau, nếu chúng không khác nhau.

Các vấn đề liên quan