classes.dex, сгенерированный smali, не работает в .apk

Я попытался создать .apk из classes.dex, созданного samli. Но я получаю эти ошибки:

Ошибка [INSTALL_FAILED_SHARED_USER_INCOMPATIBLE] (при попытке установить .apk на эмулятор)

Ошибка [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES] (при попытке установить .apk на свой телефон).

Вот шаги, которые я сделал:

  1. Извлечены классы .dex из существующего .apk.
  2. ./baksmali classes.dex
  3. ./smali out
  4. mv out.dex classes.dex
  5. Извлечено все содержимое .apk в папку и заменено classes.dex на новый.
  6. Сгенерировал .zip-файл и переименовал его в * .apk
  7. подписал приложение: jarsigner -verbose -keystore my-release-key.keystore MyFieldTest.apk mykey

Вот начало манифеста:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
        android:sharedUserId="android.uid.phone"
            package="com.htc.fieldtest"
            android:versionCode="1"
            android:versionName="1.0" >

<application android:label="Field Test">
    <activity android:label="@string/app_name" 
              android:name="FieldTestActivity" 
              android:process="com.android.phone" 
              android:launchMode="singleInstance">

Я знаю, что приложение было сначала подписано разработчиком HTC, а теперь мной. Но есть ли возможность исправить проблему?

Спасибо! Феликс


person FelixA    schedule 10.03.2012    source источник


Ответы (1)


Похоже, у вас может быть несколько подписей в новых файлах apk. Попробуйте удалить файлы в каталоге META-INF перед созданием нового zip-архива.

Кроме того, ваш новый apk, вероятно, теперь имеет сжатые ресурсы. Я не уверен, как Android с этим справится. В файлах apk, которые генерирует aapt, ресурсы (изображения, xml и т. Д.) не сжимаются, поэтому их можно отображать в память напрямую, без необходимости извлекать их.

Если вы не изменяете ресурсы, лучше всего заменить файл classes.dex в исходном файле apk, а не создавать новый. Если вы также пытаетесь изменить ресурсы, вам следует использовать apktool для извлечения / перепаковки apk.

person JesusFreke    schedule 11.03.2012
comment
Спасибо! Теперь заменил classes.dex в исходном apk. Теперь на моем устройстве и эмуляторе произошел следующий сбой: Ошибка [INSTALL_PARSE_FAILED_NO_CERTIFICATES]. Второй момент. Мне было интересно, что файл classes.dex, сгенерированный samli, имеет длину 91'048B, а оригинал - 91'060B. Возможно оптимизация. Или? - person FelixA; 12.03.2012
comment
Я удалил все файлы в папке META-INF с помощью aapt r .... Перед подписанием я получил ошибку при установке приложения: Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]. После ошибки подписания [INSTALL_FAILED_SHARED_USER_INCOMPATIBLE]. Есть идеи, что делать? - person FelixA; 12.03.2012