"First, solve the problem.
Then, write the code."
John Johnson
Android

Application not installed - błąd instalacji pliku apk

zamknięty:
styczeń 2012
zleceniodawca:
projekt autorski
Opis:

W EclipseIDE po wyeksportowaniu niepodpisanego (testy, debug) pliku apk i zapisaniu go na karcie pamięci nie byłem w stanie przeprowadzić procesu instalacji. Każda próba kończyła się komunikatem "Application not installed" - co samo w sobie niestety zbyt wiele nie mówi. Analizując logi systemu udało mi się wyłuskać informację o przybliżonej treści:

<...> ERROR/PackageParser(): Package <...> has no certificates at entry
<nazwa_pliku_z_zasobów>; ignoring!

Posiadając tylko taką wiadomości już dużo łatwiej było znaleźć jakąkolwiek odpowiedź, która mogłaby pomóc w rozwiązaniu problemu. Okazało się, że istnieją trzy możliwe rozwiązania:

  1. zmiana nazwy pliku wywołującego błąd (w moim przypadku nie zadziałało),
  2. downgrade JDK i JRE do wersji 6u26 (taką wersję posiadałem, więc to też nie to),
  3. ręczne podpisanie pliku apk kluczem wersji debug za pomocą aplikacji jarsigner (zadziałało!).

Robi się to w sposób następujący:

jarsigner -verbose -keystore %USERPROFILE%\.android\debug.keystore <plik.apk> androiddebugkey

Po wywołaniu tego polecenia w konsoli pojawi się lista plików, które zostały podpisane. Instalacja tak zmodyfikowanego pliku APK w telefonie przebiega bez zakłóceń.

Dla usprawnienia pracy napisałem sam dla siebie krótki plik bat, za pomocą którego szybko podpisuję nowo wygenerowane pliki apk:

@echo off
echo Signing Android apk file with debug key
echo ***************************************
echo Issue: http://code.google.com/p/android/issues/detail?id=830
echo.
set /p java= JDK path: 
if [%java%]==[] set java= "C:\Program Files\Java\jdk1.6.0_24"

set /p file= Full path to apk file: 
echo.
echo Passphrase: android
echo.
cd %java%\bin
jarsigner -verbose -keystore %USERPROFILE%\.android\debug.keystore %file% androiddebugkey
echo.
echo Visit http://mbialkowski.info for more.
echo.
pause

Opisana kwestia została wcześniej zgłoszona tutaj: http://code.google.com/p/android/issues/detail?id=830

do góry