Статья будет интересна таким же начинающим, как и я, которые хотят разобрать уже скомпилированный файл *.apk для внесения некоторых изменений (в большинстве случаев это будет русификация/украинизация приложений, т.к. поменять картинку можно любым архиватором), а потом обратно его скомпилировать для использования на устройстве. Вариант, как это сделать, конечно же, есть не один, но в этой статье мы остановимся на программе
APKTool и ОС
Windows. Для начала нам понадобятся программы, а именно:
1) С самого начала нам понадобится виртуальная машина Java. Скачать нужный нам вариант можно
с сайта разработчиков. Выбираем систему, под какую нам нужна виртуальная машина, нажимаем "Download", окно с авторизацией просто закрываем, после чего либо начнется скачивание файла, либо внизу вручную его можно скачать.
2) Теперь нам еще нужно скачать APKTool. Сделать это, опять же, можно
с сайта разработчика: обязательно качаем первый файл (он универсальный, вне зависимости от платформы) и либо второй, либо третий, либо четвертый файл, в зависимости от системы.
3) После того, как мы все скачали, нам нужно все проинсталлировать. С виртуальной машиной проблем не должно быть, все как обычные программы. Что б "инсталлировать" APKTool, нам нужно содержимое обоих архивов разархивировать в корень папки Windows (по умолчанию это
C:\Windows\). В итоге у нас в папке
Windows должны быть вот такие файлы (начиная с версии
APKTool 1.3.1 файл mgwx.dll
не нужен, эта dll-ка актуальна только для старых версий программы):
После того, как мы проинсталлировали все необходимые нам программы, можно приступать непосредственно к делу. Сразу хочу сказать, что тут много делается через командную строку, так что нужно уметь ею пользоваться. Для примера возьмем программу
Nexus One Gallery3D. Следующие наши действия такие:
4) Открываем командную строку (можно через меню "Пуск", можно через "Выполнить"), в итоге должны получить вот такое окно:
5) Далее нам нужно декомпилировать уже имеющийся *.apk файл, для этого мы используем вот такое шаблон:
apktool d <ПутьКФайлу> <ПутьККаталогу>, где <ПутьКФайлу> - это путь к файлу, который нам нужно декомпилировать (у меня он, например, D:\Android\building\), а <ПутьККаталогу> - это путь к каталогу, в который будет помещен результат декомпиляции (сразу скажу, что пути можно задавать как относительно, так и абсолютно - в первом случае файл и каталог будут искаться в папке, к которой мы сейчас в командной строке, в другом случае - именно там, где мы прописали). В конечном итоге у нас получится вот такое:
6) Теперь идем к каталогу, который мы указали на предыдущем шаге, видим там файлы и папки - это и есть то, с чем работает разработчик. Чтоб изменить что-то с языковыми файлами, нам нужно править xml-файлы в
..\res\values-<КодСтраны>, где <КодСтраны> - буквенное обозначение страны (для Украины - uk, для России - ru, ....). Править файлы можно как вручную, так и с помощью разных программ (здесь и далее в тексте используется программа
aiLocalizer, другие можно посмотреть в конце этого поста), что предпочтительней. После того, как запустим программу, увидим вот такое окно:
7) По кнопке "Browse..." выбираем каталог, куда мы разобрали *.apk файл, в левом спойлере выбираем нужную нам локализацию, если ее нет - создаем по кнопке "+" (в данном случае я создам украинскую локализацию). В правом спойлере выбираем нужный нам файл, в моем случае это strings.xml. В нижней части появятся заполненные три колонки:
Name - внутреннее имя поля программы (его мы не трогаем),
Original Value - перевод на английском языке (его мы тоже не трогаем) и
Local Value - вариант перевода на том языке, который мы выбрали (здесь-то нам и нужно все переводить или править). Вот что мы получим:
8) Каждую строку в поле
Local Value переводим на свой язык - либо вручную, либо по кнопке "Auto Translate..." (сейчас автоперевод
не работает, видать google что-то изменил в алгоритме....). Когда перевели все строки, обязательно нажимаем кнопку сохранения "Save changes" (обведено красным), иначе все сохранения пропадут. То же само проделываем со всеми файлами с правого спойлера, для которых есть строки для перевода в нижней части программы. После перевода окно будет выглядеть так (я перевел все с помощью автоперевода для быстроты действия, перевод не всегда может быть корректным):
9) После перевода всех файлов, с каталога нашего языка нужно удалить файлы, для которых не было строк перевода (в моем случае это 2 файла) и все файлы с расширением *.bak (это резервные копии оригинальных файлов). Для этого нажимаем клавишу "Open folder..." (обведено красным) и удаляем те файлы, про которые я писывал выше. В результате у нас должны остаться только те файлы, которые мы переводили:
10) После того, как перевод окончен, нам нужно опять собрать (скомпилировать) файл в его исходное состояние. Для этого в командной строке используется шаблон:
apktool b <ПутьККаталогу>, где <ПутьККаталогу> - папка с нашей разобранной программой. В конечном итоге у нас получится вот такое:
11) В каталоге, где у нас была разобранная программа, появилось еще 2 папки:
build и
dist. Нам нужна вторая папка, т.к. именно в ней находится собранный *.apk файл с именем "out.apk" (можем переименовать по своему усмотрению):
12)Для полного счастья нам теперь нужно подписать созданную программу. Если до этого вы не создавали себе тестовый ключ, то нужно его создать. Создается он
только один раз, после чего его можно использовать и для подписи других пересобранных программ. Для того, что б создать ключ нужно через командную строку зайти в каталог, куда установлена виртуальная машина, зайти в подпапку "bin" и там запустить файл по шаблону:
keytool -genkey -alias <YourAliasName> -keyalg RSA -validity <NumberDays> -keystore <YourKeystoreFilename>, где <YourAliasName> - имя вашего сертификата, <NumberDays> - количество дней действия сертификата, <YourKeystoreFilename> - имя хранилища сертификатов (последние два параметра: "-validity" и "-keystore" - необязательны, первый нужен для указания дней "срока годности" сертификата (по умолчанию это 180 дней), а второй - для указания конкретного хранилища, где будет сохраняться сертификат. За параметр "-validity" говорим спасибо
Skat01). В результате окно должно выглядеть вот так:
13) Теперь система будет задавать вам построчно вопросы, на которые нужно отвечать:
* Enter keystore password: - нужно указать пароль для хранилища;
* Re-enter new password: - нужно повторить введенный пароль для хранилища;
* What is your first and last name? - нужно указать ваше Имя и Фамилию (или что-то другое придуманное);
* What is the name of your organizational unit? - нужно указать имя подразделения организации (фантазируйте....);
* What is the name of your organization? - нужно указать имя организации;
* What is the name of your City or Locality? - нужно указать город в котором находится ваша организация :) ;
* What is the name of your State or Province? - нужно указать область города;
* What is the two-letter country code for this unit? - нужно указать двухбуквенный код страны (UA - Украина, RU - Россия, ....);
* Is .... correct? - система предлагает проверить, все ли правильно заполнено, если все правильно - нужно написать "yes";
* Enter key password for <YourAliasName> (RETURN if same as keystore password): - нужно указать пароль для вашего сертификата, если вы хотите оставить его таким же, как и для хранилища - ничего не вводите, просто нажмите Enter;
* Re-enter new password: - если вы ввели другой пароль, чем для хранилища, то нужно еще раз ввести пароль для вашего сертификата.
После выполнения всех шагов у вас должна быть такая картина в командной строке:
14) После того, как создали свой сертификат, можно им подписать программу. Для этого с того же каталога, с которого мы создавали свой сертификат, выполняем такой шаблон: jarsigner <ПутьКФайлу> <YourAliasName>, где <ПутьКФайлу> - скомпилированный нами файл с внесенными изменениями (который находится в каталоге
dist), <YourAliasName> - имя вашего сертификата. В процессе нужно будет указать пароль на свой сертификат. В итоге у нас будет вот такое окно:
15) Как видно из предупреждения, сертификат действителен только полгода (возможно умные люди подскажут, как это ограничения обойти). Признак успешной операции подписи программы -
папка META-INF в файле программы. Если папка есть - все, поздравляю, наша программа готова и подписана, записываем ее на телефон, устанавливаем и радуемся проделанной работе :)
Вот принтскрин результат проделанной нами работы (обведено красным прямоугольником: первый рисунок - до наших изменений, второй - после наших манипуляций с программой):
Если будут пожелания или предложения, а так же, если будут найдены ошибки - пишите в этой теме, будем улучшать этот материал.
Дополнительно:Программа для облегчения перевода by
zerabotЕще одна утилита для перевода Android-приложений by
salaoshiВ теме нет куратора. Если в теме есть пользователь, желающий стать Куратором и соответствующий Требованиям для кандидатов, он может подать заявку в теме Хочу стать куратором (предварительно изучив шапку темы и все материалы для кураторов).
До назначения куратора, по вопросам наполнения шапки, обращайтесь к модераторам раздела через кнопку под сообщениями, на которые необходимо добавить ссылки.Сообщение отредактировал vaalf - 13.05.18, 19:01Причина редактирования: добавил программу