Czy mogę użyć tego samego pliku kluczy do podpisania dwóch różnych aplikacji?

89

Muszę wgrać nową aplikację, to tylko trochę inny projekt. Wczoraj wygenerowałem plik kluczy do podpisywania aplikacji. Czy mogę użyć tego samego?

Raluca Lucaci
źródło
5
tak, możesz (również próbowałeś przed zapytaniem?)
njzk2

Odpowiedzi:

96

Możesz tego użyć keystoredo dowolnej liczby aplikacji.

Nie ma potrzeby generowania nowego magazynu kluczy.

Chirag
źródło
6
A co mam napisać w przypadku „Alias”?
Dr Jacky
12
Magazyn kluczy ZAWIERA publiczne / prywatne pary kluczy, które składają się na certyfikat podpisywania. Jeden magazyn kluczy może zawierać wiele par kluczy. „Alias” to odniesienie do określonej pary kluczy w magazynie kluczy. Jeden magazyn kluczy może pomieścić wszystkie twoje pary kluczy, ale powinieneś mieć jedną parę kluczy na aplikację. Jako aliasu użyj nazwy podpisywanej aplikacji. Możesz mieć oddzielne hasła do swojego magazynu kluczy i dla każdej pary kluczy w nim zawartej. Możesz zmienić te hasła i importować / eksportować pary kluczy z magazynu kluczy lub dodawać nowe pary kluczy do swojego magazynu kluczy. Wszystko to odbywa się za pomocą polecenia „keytool” wiersza poleceń. Sprawdź to.
brycewjohnson
@brycewjohnson Czy nowe pary można dodawać do magazynu kluczy za pośrednictwem graficznego interfejsu użytkownika?
CinCout
43

Przedstawię jak dotąd kontrargument do zgodnej odpowiedzi.

Zgadzam się, że dla większości autorów aplikacji przez większość czasu udostępnianie tego samego magazynu kluczy / certyfikatu / hasła między aplikacjami będzie działało dobrze. Najważniejsze jest używanie „ tego samego certyfikatu przez cały oczekiwany okres użytkowania aplikacji ”, aby aplikacja mogła się uaktualniać.

Ale przychodzi mi do głowy jeden bardzo dobry powód, aby mieć oddzielne magazyny kluczy dla oddzielnych aplikacji lub rodzin aplikacji. Jeśli myślisz, że kiedykolwiek będziesz chciał sprzedać aplikację komuś innemu, aby mógł ją opublikować jako uaktualnienie do oryginału, musisz udostępnić jej jedyny magazyn kluczy i hasło, aby to zrobić. Prawdopodobnie nie jest to duży problem, ale trochę zmartwienia dla ciebie i być może kwestia należytej staranności dla wystarczająco dużego nabywcy.

Poza tym naprawdę nie czytam tej samej linii w dokumentacji w taki sam sposób, jak robi to @ol_v_er. Myślę, że obecna linia:

Wszystkie aplikacje należy podpisywać tym samym certyfikatem przez cały przewidywany okres ich użytkowania.

(zwróć uwagę na brak przecinka w aktualnej wersji) po prostu podkreśla, że ​​zalecenie „dożywotnia” dotyczy wszystkich aplikacji, a nie kieruje w rzeczywistości do używania tego samego certyfikatu dla wszystkich aplikacji.

Anne Gunn
źródło
6
Najlepszym rozwiązaniem powinno być przechowywanie oddzielnych magazynów kluczy dla każdej aplikacji!
Sufian
42

Oficjalna dokumentacja mówi nam:

Ogólnie zalecaną strategią dla wszystkich programistów jest podpisywanie wszystkich aplikacji tym samym certyfikatem przez cały oczekiwany okres ich użytkowania. Jest kilka powodów, dla których warto to zrobić ...

https://developer.android.com/studio/publish/app-signing.html#considerations

Więc tak, spróbuj podpisać wszystkie swoje aplikacje tym samym certyfikatem.

ol_v_er
źródło
8
A co mam napisać w przypadku „Alias”?
Dr Jacky
6
Aby to uprościć, używaj tego samego dla wszystkich swoich aplikacji.
ol_v_er
18

Chcę tutaj dodać wyjaśnienie, ponieważ to pytanie i udzielone odpowiedzi wprowadzają mnie w zakłopotanie. Ważne jest, aby zrozumieć, czym właściwie jest magazyn kluczy.

Magazyn kluczy to tylko sposób na bezpieczne przechowywanie pary kluczy publiczny / prywatny, która jest używana do podpisywania aplikacji na Androida. Więc tak, możesz bez problemu używać tego samego magazynu kluczy do podpisywania wielu aplikacji. Możesz także użyć tego samego aliasu (każdy alias jest certyfikatem) do podpisania wielu apek i to zadziała. Ma to jednak wpływ na bezpieczeństwo. Jeśli Twój pojedynczy alias zostanie przejęty, wszystkie Twoje aplikacje zostaną przejęte.

Jeśli jednak zamierzasz pewnego dnia sprzedać prawa do swoich aplikacji, używanie tego samego aliasu do wszystkich aplikacji może nie być dobrym pomysłem. Jednak użycie tego samego magazynu kluczy, pod warunkiem, że używasz innego aliasu dla każdego apk, niekoniecznie musi być złą opcją. Jestem pewien, że istnieje sposób na przeniesienie certyfikatu z jednego magazynu kluczy do drugiego, tak aby można było bezpiecznie przekazać kupującemu klucze niezbędne tylko do tego certyfikatu.

Aby było jasne, magazyn kluczy jest właśnie tym, nośnikiem przechowywania kluczy. Nie odgrywa żadnej rzeczywistej roli w procesie podpisywania apk, ale służy tylko do przechowywania kluczy, które są faktycznie używane do podpisywania apk.

Bibliografia:

Zrozumienie magazynu kluczy, certyfikatów i aliasów

https://www.digitalocean.com/community/tutorials/java-keytool-essentials-working-with-java-keystores

Anthony Stivers
źródło
1
Nie publikuj identycznych odpowiedzi na wiele pytań. Opublikuj jedną dobrą odpowiedź, a następnie zagłosuj / oflaguj, aby zamknąć pozostałe pytania jako duplikaty. Jeśli pytanie nie jest powtórzeniem, dostosuj swoje odpowiedzi do pytania.
Paul Roub
Przeprosiny. Jestem noobem dla SO.
Anthony Stivers
1
Nie mam wystarczającej liczby przedstawicieli, aby głosować na duplikat. Więc jeśli chcielibyście głosować na poniższe pytania jako duplikaty, uważam, że to pytanie jest najbardziej odpowiednie, aby nie powielać. Jest to pierwsza pozycja w Google dla odpowiednich słów kluczowych i zawiera najtrafniejsze odpowiedzi. stackoverflow.com/questions/13023509/… stackoverflow.com/questions/14973205/… stackoverflow.com/questions/10514597/…
Anthony Stivers
Czekać! Jak mogę używać tego samego magazynu kluczy, ale z różnymi aliasami dla każdej aplikacji ?!
Ziad H.
5

Oczywiście! Możesz używać tego samego pliku kluczy tyle razy, ile chcesz. Zawsze lepiej jest używać tego samego pliku kluczy dla wszystkich tworzonych aplikacji. To pomoże, jeśli chcesz zaktualizować lub zmodyfikować aplikację. Wówczas musisz podpisać swoją aplikację tym samym kluczem.

Rohit
źródło
2

Podpisuję wszystkie moje aplikacje przy użyciu tego samego certyfikatu (magazynu kluczy). Daje to korzyść, jeśli zmienię zdanie i chcę, aby moje aplikacje udostępniały swoje dane.

Jak być może wiesz, Android identyfikuje każdą aplikację za pomocą identyfikatora UID. Jeśli wszystkie Twoje aplikacje są podpisane tym samym certyfikatem, możesz poprosić Androida o przypisanie tego samego identyfikatora użytkownika do więcej niż jednej aplikacji, a następnie uruchomienie ich w jednym procesie i udostępnianie danych.

Z android doc android: sharedUserId

android: sharedUserId

Nazwa identyfikatora użytkownika systemu Linux, który będzie udostępniany innym aplikacjom. Domyślnie system Android przypisuje każdej aplikacji własny, unikalny identyfikator użytkownika. Jeśli jednak ten atrybut ma taką samą wartość dla dwóch lub więcej aplikacji, wszystkie będą miały ten sam identyfikator - pod warunkiem, że są również podpisane tym samym certyfikatem. Aplikacje z tym samym identyfikatorem użytkownika mogą uzyskiwać wzajemny dostęp do danych i, w razie potrzeby, działać w tym samym procesie

sujith
źródło
1

Ostatnia aktualizacja

Jeśli chcesz zarejestrować się w podpisywaniu aplikacji przez Google , musisz użyć nowego innego klucza do podpisania swojego apk lub pakietu, w przeciwnym razie po przesłaniu konsoli Google wyświetli się komunikat o błędzie:

Przesłałeś plik APK lub pakiet aplikacji na Androida, który jest podpisany kluczem używanym również do podpisywania plików APK dostarczanych użytkownikom. Ponieważ jesteś zarejestrowany w Podpisywaniu aplikacji przez Google Play, powinieneś podpisać swój plik APK lub pakiet aplikacji na Androida nowym kluczem, zanim go prześlesz

Riya Parmar
źródło
Udało mi się wygenerować nowy klucz na ekranie podpisywania aplikacji Android Studio. Wygeneruj nowy magazyn kluczy i alias i może zadziałać. U mnie to zadziałało.
Numan Karaaslan