Переименование имени пакета внутри APK - PullRequest
7 голосов
/ 10 февраля 2012

Я создал приложение AIR , которое в настоящее время доступно на рынке.Для обновления приложения, очевидно, я должен сохранить то же имя пакета.Мои первые версии были упакованы с использованием Eclipse с плагином ADT.

Теперь для использования Собственные расширения AIR 3.0 (ANE), которые были недоступны при первой разработке приложенияВ настоящее время я должен создать свой APK с помощью инструментов командной строки AIR.К сожалению, эти инструменты командной строки вынуждают вас иметь имя пакета, которое начинается со слова «воздух».Например, мне нужно имя пакета "com.example".AIR создает имя пакета как «air.com.example».

Так что теперь я не могу обновить свое приложение в маркете, так как имя пакета изменилось.У Adobe есть эта ужасная статья, которая поможет вам переименовать и удалить «воздух» из пакета.Я не великий программист, так что это действительно поставило меня в тупик.http://kb2.adobe.com/cps/875/cpsid_87562.html

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

 apkbuilder final.apk -u -z resources.arsc -f classes.dex

Я получаю это сообщение об ошибке:

ЭТОТ ИНСТРУМЕНТ УСТАРЕЛ.Смотрите --help для получения дополнительной информации.java.io.FileNotFoundException: resources.arsc не существует

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

Есть ли шанс в этой работе?Если кому-то это интересно, у меня есть zip-файл с примером AIR apk, файлы Windows Bat для всей работы командной строки и все необходимые утилиты, поэтому их не нужно загружать.Для начала вам просто нужно изменить мой path.bat, чтобы он соответствовал вашей системе.И вам нужен notepad ++ (или эквивалент), чтобы автоматизировать пакетное переименование имени пакета в нескольких файлах. bradwallacedesign.com / dktimer / renameApkProject.zip

Большое спасибо!

Ответы [ 4 ]

9 голосов
/ 28 апреля 2012

это было сделано на ПК. я понятия не имею, как это сделать на Mac.

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

http://bradwallacedesign.com/share/renameAPK.zip

скачайте и распакуйте мой файл (renameAPK.zip) в c: \ renameAPK.

необходимые файлы:

  1. мой файл (renameAPK.zip), который содержит apkTool
  2. Java JDK / JRE
  3. Android SDK
  4. notepad ++ (или эквивалентный текстовый редактор, который можно переименовать в несколько файлов)

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

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

инструкция:

двойной щелчок `openCmd.bat , чтобы открыть командную строку, указывающую на каталог со всеми вашими файлами.

0. Запустите 0path.bat , чтобы установить свой путь. (Я не могу вспомнить, нужен ли Adobe Air SDK для этого, но у меня есть это на моем пути. Очевидно, нужен JDK и Android SDK для jarsigner и zip выровнять, я думаю.)

1. run 1decompileAPK.bat , чтобы apkTool декомпилировал ваше приложение в папку с именем UNZIPPEDapk

2. следуйте инструкциям в 2editManifest & PackageName - Инструкции (не в форме летучей мыши) .txt для редактирования манифеста и имени пакета с помощью Notepad ++ внутри UNZIPPEDapk:

изменить AndroidManifest.xml:

a. изменить имя пакета с air.oldPackageName на newPackageName

b. редактировать другие необходимые записи:

c. переименуйте систему папок в папке "smali", чтобы она работала с вашим новым именем пакета например: если старое имя пакета было: air / oldName, измените папки, чтобы они соответствовали новому имени пакета: air / newName

используйте notepad ++ (или любой редактор, который может находить и заменять текст во многих файлах)


d. ctrl + shift + f --- "Найти в файлах"

  find:
air/oldPackageName
  replace with:
newPackageName
  where:
all files in UNZIPPEDapk/smali

(я думаю, что было более 200 замен)

3. запустите 3buildDistFolder.bat , чтобы apkTool собрал новый apk в папке UNZIPPEDapk \ Dist

4. следуйте инструкциям в 4getMissingFiles - инструкция.txt , чтобы восстановить 2 отсутствующих файла в новой сборке:

a. Два файла не были собраны во время 3buildDistFolder:

3buildDistFolder.bat собрал новый apk в папке \ UNZIPPEDapk \ dist, но ему не удалось скопировать 2 файла:

(skipping hidden file 'C:\Users\computer\apkTool\UNZIPPEDapk\assets\META-INF

\ AIR \ расширения \ com.adobe.mobile \ META-INF \ АНХ \ Android-ARM.classpath ') (пропуская скрытый файл 'C: \ Users \ computer \ apkTool \ UNZIPPEDapk \ assets \ META-INF \ AIR \ расширения \ com.adobe.mobile \ META-INF \ АНХ \ Android-ARM.project ')

возьмите эти 2 файла из вашего оригинального apk и поместите их в новый apk в нужной папке

b. скопируйте yourApp.apk из DKTimer / Dist / в корневой каталог, где находятся ваши bat-файлы.

5. Запустите 5signAPK.bat , чтобы подписать apk.

developer.android.com / руководство / публикации / приложение-signing.html

6. run 6verifySigned.bat для проверки правильности подписи

7. запустите 7zipAlign.bat , чтобы выровнять файл apk.

developer.android.com / руководство / разработки / инструменты / zipalign.html


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

8. Запустите 8installAPK.bat , чтобы установить APK на USB-устройстве.

9. Запустите 9remoteDebugger.bat если вы хотите использовать удаленную отладку.


я надеюсь, что это кому-нибудь поможет.дайте мне знать, если я забыл что-то включить.Кроме того, если вы знаете лучший способ сделать это, пожалуйста, прокомментируйте (например, как объединить это в 1 длинный файл паузы bat) ...

6 голосов
/ 16 мая 2013

Существует простая переменная окружения, которую вы можете установить, чтобы легко отключить префикс air.. В пакере Adobe AIR существует следующий код:

String optOut = System.getenv("AIR_NOANDROIDFLAIR");
if ((optOut == null) || (optOut.indexOf("true") == -1)) {
  packageName = "air." + packageName;
}

Итак, просто установите переменную окружения AIR_NOANDROIDFLAIR на true, перепакуйте ваше приложение, и оно не будет иметь префикса air.. Google, как установить переменные окружения в windows или mac для вашей конкретной версии ОС.

Например, я использую компилятор командной строки в Mac / Linux, поэтому я запускаю:

> export AIR_NOANDROIDFLAIR=true
> java -jar $AIR_HOME/lib/adt.jar -package -target apk-captive-runtime -storetype pkcs12 -keystore cert.p12 -storepass *** Main.apk Main-app.xml Main.swf

Предупреждение: я не знаю, какое это имеет значение. Согласно чьему-либо примечанию выше, это может быть хорошей идеей только для среды выполнения в неволе (но это стандартная версия AIR 3.8).

Обновление: Ренаун Эриксон сказал это не должно вызывать проблем.

Кросс-пост здесь (немного другой вопрос, тот же ответ).

5 голосов
/ 23 мая 2014

Попробовав несколько инструментов apkRename, я обнаружил, что все они не работают в каком-то приложении, например com.android.browser на устройстве HTC.

Причина в apktool, который иногда неправильно распаковывает apk файл.


Итак, я создаю свой собственный инструмент: https://github.com/sjitech/ApkRename Не нужно apktool, не нужно aapt, просто утилиты java и jar. Эта утилита напрямую изменяет AndroidManifest.xml, поэтому без перекомпиляции всего ресурса с помощью apktool, так что чисто.

Протестированные устройства: 11 видов (оба андроида 4+, но 2.2+ не должны быть в порядке) Протестированная ОС: Mac OS X 10.9 и CentOS 6. (Cygwin с bash 4+ должен быть в порядке, но еще не протестирован)

1 голос
/ 10 февраля 2013

Я на самом деле попробовал подход Брэда и не мог себе представить, что нужно проходить процесс КАЖДЫЙ РАЗ, когда я составлял релиз. поэтому я сделал что-то еще ... я изменил ADT, чтобы он не вставлял "воздух". в начале и заменяет его более полезным расширением, таким как "com."

Вот краткое изложение подхода:

использование: jar xf adt.jar

, чтобы извлечь файл adt.jar в каталог на рабочем столе. вы найдете его в {adobe SDK} / lib /

найдите файл APKOutputStream.class

com / Adobe / Air / APK / APKOutputStream.class

Откройте его в шестнадцатеричном редакторе (например, я использовал HxD). Ищите «воздух». (без кавычек, но с точкой).

Не удаляйте запись. Я пытался, вы не можете, это портит класс, и он не будет работать. Однако вы можете заменить «воздух». с "ком." потому что он имеет одинаковое количество символов и не влияет на длину файла. Префикс com гораздо полезнее для большинства из нас.

сохраните измененный файл APKOutputStream.class и перепакуйте его с JAR. как то так:

jar cfm .. \ patchedadt.jar .. \ MANIFEST.MF *

вы захотите скопировать этот файл MANIFEST.MF из подкаталога пакета с именем META-INF

Переименуйте ваш patchedadt.jar в adt.jar и поместите его обратно в каталог lib. Работает с Flash Builder и всем этим облачением.

Само собой разумеется, когда вы будете там, вы захотите производить свою упаковку без «ком». префикс, так что вы не получите com.com.your.package.name.

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

джим

...