2016-03-09 2 views
1

Я создал небольшое тестовое приложение, состоящее всего из onCreate(). Я могу установить его на моем эмулированном Nexus 7 через adb install просто отлично. Однако декодирование с использованием apktool decode и восстановление с помощью apktool build -c (-c, чтобы скопировать подпись) дает APK, которые не могут быть установлены:Декодирование и восстановление приложения с помощью Smali

➜ ApkToolTesting adb install justoncreate/dist/justoncreate.apk 
1227 KB/s (1145010 bytes in 0.910s) 
    pkg: /data/local/tmp/justoncreate.apk 
Failure [INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION] 

Что может быть причиной этой неудачи? Что-то еще должно быть потеряно во время процесса сборки.

EDIT: вероятно, соответствующий logcat выход:

03-09 17:12:49.129 1946 1958 D DefContainer: Copying /data/local/tmp/justoncreate.apk to base.apk 
03-09 17:12:49.167 1302 1326 W PackageManager: Failed collect during installPackageLI 
03-09 17:12:49.167 1302 1326 W PackageManager: android.content.pm.PackageParser$PackageParserException: Failed reading res/color/abc_primary_text_material_light.xml in [email protected] 
03-09 17:12:49.167 1302 1326 W PackageManager: at android.content.pm.PackageParser.loadCertificates(PackageParser.java:600) 
03-09 17:12:49.167 1302 1326 W PackageManager: at android.content.pm.PackageParser.collectCertificates(PackageParser.java:1102) 
03-09 17:12:49.167 1302 1326 W PackageManager: at android.content.pm.PackageParser.collectCertificates(PackageParser.java:1057) 
03-09 17:12:49.167 1302 1326 W PackageManager: at com.android.server.pm.PackageManagerService.installPackageLI(PackageManagerService.java:12196) 
03-09 17:12:49.167 1302 1326 W PackageManager: at com.android.server.pm.PackageManagerService.-wrap25(PackageManagerService.java) 
03-09 17:12:49.167 1302 1326 W PackageManager: at com.android.server.pm.PackageManagerService$9.run(PackageManagerService.java:10156) 
03-09 17:12:49.167 1302 1326 W PackageManager: at android.os.Handler.handleCallback(Handler.java:739) 
03-09 17:12:49.167 1302 1326 W PackageManager: at android.os.Handler.dispatchMessage(Handler.java:95) 
03-09 17:12:49.167 1302 1326 W PackageManager: at android.os.Looper.loop(Looper.java:148) 
03-09 17:12:49.167 1302 1326 W PackageManager: at android.os.HandlerThread.run(HandlerThread.java:61) 
03-09 17:12:49.167 1302 1326 W PackageManager: at com.android.server.ServiceThread.run(ServiceThread.java:46) 
03-09 17:12:49.167 1302 1326 W PackageManager: Caused by: java.lang.SecurityException: META-INF/MANIFEST.MF has invalid digest for res/color/abc_primary_text_material_light.xml in res/color/abc_primary_text_material_light.xml 
03-09 17:12:49.167 1302 1326 W PackageManager: at java.util.jar.JarVerifier.invalidDigest(JarVerifier.java:140) 
03-09 17:12:49.167 1302 1326 W PackageManager: at java.util.jar.JarVerifier.-wrap0(JarVerifier.java) 
03-09 17:12:49.167 1302 1326 W PackageManager: at java.util.jar.JarVerifier$VerifierEntry.verify(JarVerifier.java:132) 
03-09 17:12:49.167 1302 1326 W PackageManager: at java.util.jar.JarFile$JarFileInputStream.read(JarFile.java:117) 
03-09 17:12:49.167 1302 1326 W PackageManager: at android.content.pm.PackageParser.readFullyIgnoringContents(PackageParser.java:5113) 
03-09 17:12:49.167 1302 1326 W PackageManager: at android.content.pm.PackageParser.loadCertificates(PackageParser.java:597) 
03-09 17:12:49.167 1302 1326 W PackageManager: ... 10 more 
+0

Запуск 'adb logcat' во время установки обеспечит реальную ошибку. '-c' apktool, вероятно, будет удален. Новые версии Android требуют отставки любой модификации приложения. '-c' просто вставляет исходную папку' AndroidManifest.xml' и 'META-INF' в восстановленное приложение. Эти два файла/каталогов были единственными файлами в сигнатуре, которую Android проверил. –

+0

Спасибо за ваш ответ. Эмулируемый Nexus 7 запускает Marshmallow - поэтому ваша гипотеза безопасности может быть очень правильной. Я добавил вывод «logcat» в сообщение. Кажется, есть некоторые проблемы с безопасностью, связанные с «META-INF», что для меня не имеет смысла, поскольку «-c» должен был просто скопировать исходный файл, который работал в первую очередь. –

+0

Да, боюсь, я прав. Apktool, пока он старался поддерживать 100% -ный матч, это просто невозможно в разы. Это означает, что подписи в файлах будут меняться на некоторых во время сценария декодирования/сборки. Простое решение состоит в том, чтобы просто отменить все приложение, которое может не быть для вас вариантом. –

ответ

0

Не опция -c действует только на "построить"?

Чтение apktool вики, вы можете прочитать:

После [г] ecode, будут новые папки (оригинал/неизвестен) в расшифрованной папке APK

  • оригинал = мета- INF/AndroidManifest.xml, которые необходимы для сохранения подписи apks для предотвращения необходимости уйти в отставку. Используется с -c/--copy-оригинала на [б] uild

Так что я думаю, что правильный синтаксис команды:

apktool b -c folder 

Я никогда не пытался что, поэтому я не уверен на 100%.

+0

Упс, это была опечатка в моем OP. Вероятно, это дало бы синтаксическую ошибку в любом случае. Спасибо за подсказку, хотя все равно. –

Смежные вопросы