Używając Anta, próbuję zbudować aplikację Android w trybie wydania do dystrybucji. Mój problem dotyczy procesu podpisywania. Utworzyłem magazyn kluczy i alias za pomocą Eclipse przy użyciu kreatora Eksportuj aplikację na Androida, a aplikacja jest poprawnie podpisana, jeśli wyeksportuje ją przez Eclipse. Kiedy staram się ukończyć ten sam proces poprzez Ant odwołać mój kluczy i alias w moim pliku build.properties:Podpisywanie Android za pomocą Anta
key.store=C:\\Users\\a512091\\.android\\release.keystore
key.alias=application
key.store.password=android
key.alias.password=android
Proces kompilacji jest udany i dostaję plik Application-release.apk. Naprawiłem ten plik APK z jarsignerem, a wszystkie pliki mają znaczniki "sm". To jest ogon wyjścia:
jar verified.
Warning:
This jar contains entries whose certificate chain is not validated.
Kiedy próbuję zainstalować ten plik APK w emulatorze lub urządzeniu pojawia się następujący:
Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]
Logcat pokazuje problemy z logowaniem na mój plik CSS oraz aktywów graficznych :
11-07 11:06:20.060: WARN/PackageParser(58): Exception reading assets/www/css/base.css in /data/app/vmdl48898.tmp
11-07 11:06:20.060: WARN/PackageParser(58): java.lang.SecurityException: META-INF/XXXXX.SF has invalid digest for assets/www/res/droidhdpi/favorite_off.png in /data/app/vmdl48898.tmp
11-07 11:06:20.060: WARN/PackageParser(58): at java.util.jar.JarVerifier.verifyCertificate(JarVerifier.java:369)
11-07 11:06:20.060: WARN/PackageParser(58): at java.util.jar.JarVerifier.readCertificates(JarVerifier.java:272)
11-07 11:06:20.060: WARN/PackageParser(58): at java.util.jar.JarFile.getInputStream(JarFile.java:392)
11-07 11:06:20.060: WARN/PackageParser(58): at android.content.pm.PackageParser.loadCertificates(PackageParser.java:337)
11-07 11:06:20.060: WARN/PackageParser(58): at android.content.pm.PackageParser.collectCertificates(PackageParser.java:508)
11-07 11:06:20.060: WARN/PackageParser(58): at com.android.server.PackageManagerService.installPackageLI(PackageManagerService.java:5885)
11-07 11:06:20.060: WARN/PackageParser(58): at com.android.server.PackageManagerService.access$2100(PackageManagerService.java:134)
11-07 11:06:20.060: WARN/PackageParser(58): at com.android.server.PackageManagerService$5.run(PackageManagerService.java:4743)
11-07 11:06:20.060: WARN/PackageParser(58): at android.os.Handler.handleCallback(Handler.java:587)
11-07 11:06:20.060: WARN/PackageParser(58): at android.os.Handler.dispatchMessage(Handler.java:92)
11-07 11:06:20.060: WARN/PackageParser(58): at android.os.Looper.loop(Looper.java:123)
11-07 11:06:20.060: WARN/PackageParser(58): at android.os.HandlerThread.run(HandlerThread.java:60)
11-07 11:06:20.069: ERROR/PackageParser(58): Package com.xxxxx.xxxxx has no certificates at entry assets/www/css/base.css; ignoring!
W jaki sposób należy uwzględnić atrybut "verbose"? Teraz flaga verbose jest zawsze ustawiona. –
"verbose" wymaga jedynie łatwego zastąpienia oryginalnego celu "signjar". – FeelGood
Czy możesz podać więcej informacji o swoim rozwiązaniu 1.8.3+. Jakie są te zmienne? Skąd czerpię ich wartości? – Guy