Файл APK Repackage для хранения настраиваемых активов – какой инструмент построения использовать?

Обновление : это старый пост, а ссылки ниже для сломанных версий aapt будут устаревшими.


Основываясь на предыдущей обратной связи, я сохраняю пользовательские текстовые поля в каталоге ресурсов моего приложения.

Я напишу приложение, используя данные пользователя по умолчанию в файле активов, и клиент хотел бы перестроить приложение для каждого пользователя, включая данные этого пользователя в файле активов.

(Я знаю, что этот метод имеет некоторые серьезные недостатки, но клиент все еще стремится сделать это таким образом – см. « Ввести данные входа в APK-файл, разные для каждого пользователя (или другие параметры?) )

Этот вопрос связан с проблемами, которые возникают у меня при восстановлении файла APK, как только я его распакую, и обновил файл пользовательских активов. Я совершенно убежден, что мне не хватает чего-то маленького, однако документация и сообщения, которые я нашел на этих методах, недостаточно полезны для новичков.

  1. aapt – Android sdk tool: К сожалению, андроидные документы на «Использование aapt» на документах Android [ссылка 2 ниже] очень ограничены. Команда консоли –help показывает немного больше информации. При попытке использовать его для добавления файла в test.apk он удаляет исходный файл и создает новый файл test.apk.zip, содержащий только файл, который я пытался добавить. Я не смог найти правильную комбинацию командной строки, чтобы снять распакованный apk и переупаковать его – это будет мой первый приз.

  2. apkbuilder – Android sdk tool: во-первых, этот инструмент устарел, что является отрицательной точкой для него. Я также не могу заставить его работать с тем, что у меня есть в этой распакованной папке. Я думаю, что мне не хватает шага pre-apkbuilder, потому что apkbuilder запрашивает архив zip-ресурсов, и у меня есть папка с ресурсами.

  3. ant-build tool: Другие похожие сообщения говорят, что строить с помощью ant, а не использовать инструменты Android. У меня проблемы с работой муравья. Одна конкретная ссылка на получение Ant для работы с Android [ссылка 3 ниже] выглядит многообещающей, но похоже, что это для другого sdk для Android (мой build.xml, который генерируется андроидом, отличается от него). К сожалению, я мало знаю об муравьях, и у меня проблемы с экспертами, чтобы решить мою текущую проблему.
    В дополнение к решению NickT ниже – запуск скрипта ant дает мне ошибку
    taskdef class com.android.ant.SetupTask не может быть найден с помощью загрузчика classов AntClassLoader [] .
    Я нашел некоторые ссылки в Интернете по этой ошибке, подтвердил, что local.properties имеет параметр sdk.dir, указывающий на папку установки sdk для установки android (sdk.dir = / Applications / android-sdk-mac_86).

  4. Может быть, есть и другой вариант, который я не перечислял / обнаружил, о чем мне было бы интересно узнать.

Я понимаю, что вникание в механизмы, которые обычно покрываются моей идеей, может привести к диверсификации. Но я знаю, что многие пользователи SO могут делать многие из этих вещей, и я надеюсь, что я заинтересован в некоторых из них. Спасибо за любую помощь.

(Eclipse 3.6 на Mac Snow Leopard 10.6 64 бит)

PS, я не могу опубликовать более 1 гиперссылки, поэтому я включил эти адреса, чтобы показать больше информации на мой вопрос.

(1): stackoverflow.com/questions/4783160/embed-login-details-in-apk-file-different-for-each-user-or-other-options

(2): developer.android.com/guide/developing/tools/aapt.html

(3): www.disgruntledrats.com/?p=27

    Чтобы ответить на мой вопрос методом, который мы, наконец, выбрали, и «для записи»:

    Мне не удалось заставить Ant работать правильно для меня (мое отсутствие понимания).

    Я закончил использовать инструмент aapt. Он работает согласно документации Android sdk и действительно прост в использовании:

     aapt add -v Test.apk "assets/readme.txt" 

    Это добавит файл readme.txt (мы сохранили его в подпапке текущей текущей папки, называемой активами. Если вы хотите сохранить новый файл где-то еще, aapt предлагает коммутатор командной строки, чтобы указать это)

    Однако есть некоторые оговорки:

    1. Я не мог заставить его работать над подписанными файлами APK.
    2. некоторые версии aapt не работают должным образом! Они не распознают подпапку …

    Чтобы решить проблему 1:

    1. Экспортируйте APK из eclipse в качестве неподписанного APK.
    2. Используйте keytool для создания ключа (см. Android dev docs).
    3. Используйте aapt.
    4. Подпишите APK с помощью jarsigner.

    Чтобы решить проблему 2:

    Я не могу с этим поделать. Каждая версия SDK (на Mac), которую я пытался загрузить, включала инструмент aapt, который не распознавал подпапки. Коллега загрузил версию, которая сработала, но мы все еще не могли понять, какую версию он загрузил, поэтому мы сохранили эту «магическую» копию и переименовали ее, и будем использовать ее, пока не найдем новую версию, которая работает.

    Самое простое решение – предоставить шаблонному шаблону приложения вашему клиенту скрипт, который перестраивает приложение с нуля.

    Таким образом, ваш клиент просто должен изменить активы в папке, дважды щелкнуть пакетный файл и получить apk через минуту или около того.

    Вам не нужно ничего знать о ANT для компиляции и упаковки без IDE, просто выполните следующие действия:

    http://developer.android.com/guide/developing/other-ide.html

    ANT-скрипт генерируется командами «android create» «android update». Затем вам просто нужно запустить «ant release» и выйти.

    Немного поздно, наверное, но этот пост появляется во многих поисках, поэтому я подумал, что это может представлять интерес.

    Я просто использовал стандартный инструмент Zip для «unsign» APK, удалив папку META-INF, обновил все файлы активов, а затем смикшировал APK с помощью jarsigner. (Если бы я мог найти способ подписывать JAR без использования jarsigner, так что нам не понадобится Java SDK, установленный повсюду, это было бы очень полезно – идеи кто-нибудь?)

    Чтобы расширить ответ Яхеля, да, я думаю, что Муха – это путь. Это может быть немного пугающе, но он урагается, насколько хорошо он работает «из коробки», не слишком много возиться. Настройка требует немного чтения, но мне это удалось, поэтому я дам вам пользу от моего опыта.

    Сначала создайте образец приложения, как предложено. Предположим, вы хотите, чтобы он был создан в c: \ junk. Затем из командной строки в каталоге Android SDK \ tools введите:

     android create project -t 5 -n AndSampleApp -pc:\junk\AndSampleApp -a AndSampleApp -k com.yourpackage.andsample. 

    (-t 5 дает вам уровень API 7, тип «Цели списка андроидов», чтобы увидеть другие параметры)

    Предположим, вы строили свои проекты в рабочей области Eclipse (это / dev / projects / EclipseHelios / AndroidWorkspace на моей машине). Скопируйте файлы build.xml и build.properties образца приложения в папку проекта в Eclipse

    и отредактируйте вновь созданный файл build.xml и удалите строку

      

    и замените его просто:

      

    Теперь отредактируйте вновь созданные объекты build.properties, которые будут пустыми, за исключением комментариев, и добавьте (при необходимости, настройку):

     # The password will be asked during the build when you use the 'release' target. # OH NO IT WON'T! IF YOU PUT THE KEYS & PWDS IN AS BELOW - It'S AUTOMATIC # Customised (hard coded) section --------------------- projectname=YourActualProjectName # Line below is the parent folder of where the sources are workspace.dir=/dev/projects/EclipseHelios/AndroidWorkspace # Line below is where you want the binaries to go outbasebase.dir=/dev/projects/AntBuilds key.store=c:/users/you/your-release-key.keystore key.alias=your_release_alias key.store.password=YourSecretPassword key.alias.password=YourSecretPassword #------------------------------------------------------ ant.project.name=${projectname} base.dir=${workspace.dir}/${projectname} source.dir=${base.dir}/src outbase.dir=${outbasebase.dir}/${projectname} out.dir=${outbase.dir}/bin layout.dir=${base.dir}/res/layout 

    Если после этого вы получите приглашение командной строки в / dev / projects / EclipseHelios / AndroidWorkspace / YourActualProjectName

    и введите ‘ant release’, вы должны получить встроенный и подписанный apk в / dev / projects / AntBuilds / YourActualProjectName

    Вы должны иметь возможность настроить местоположение активов, добавив запись assets.dir в build.properties

    Interesting Posts

    График рассеяния Excel с ярлыками

    Аутентификация и авторизация Websocket весной

    ПК отключается в произвольные моменты времени

    Как использовать AOP с AspectJ для ведения журнала?

    Могу ли я поделиться своим кабельным интернет-подключением через мой беспроводной маршрутизатор ADSL?

    Как XML-сериализовать словарь

    Разница между перечислением Java и iteratorом

    Как я могу получить новый сеанс браузера при открытии новой вкладки или окна в Firefox / Chrome?

    Как я могу остановить повторное позиционирование окон после пробуждения от сна?

    Maven – всегда загружайте источники и javadocs

    Знак подчеркивания Java 7 в числовых литералах

    Почему Dropbox использует так много памяти в Linux?

    Как правильно настроить NSPredicate для отношения «многие» при использовании Core Data?

    Найти элементы в одном столбце Excel, которые не находятся в другом столбце, и поместить их в новый столбец

    Создайте гиперссылку из URL и заголовка в Excel

    Давайте будем гением компьютера.