Способ перевода Android-приложений | [Перевод приложений]



Реп: (323)
Статья будет интересна таким же начинающим, как и я, которые хотят разобрать уже скомпилированный файл *.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
Причина редактирования: добавил программу



Реп: (6)
Отличная статья большое спасибо.... мечтал чтоб ктони будь написал подробнее об манипуляциях с АПКТуллс и тут на тебе :-) "ГазПром - Мечты сбываются" (из рекламы) +++

Прошу модераторов прилепить статью!

Сообщение отредактировал Jeksan - 16.05.10, 16:03



Реп: (250)
MScorpionZ - это просто МЕГА-РЕСПЕКТ!!! Это нет слов - это орден и три медали!
Теперь я займусь любимым софтом!!!! :heppy_dancing:



Реп: (250)
MScorpionZ, я несколько раз внимательно перечитал. Возник вот такой вопрос.
Программы апдейтятся очень часто, некоторые пару раз в месяц. Скорее всего локализация будет слетать.
Можно ли какие-то шаблоны иметь, чтобы следующую версию программы смастерить быстрее или каждый раз так?
Я понимаю, что можно сделать "финт ушами" и отослать свою локаль разработчику и он на 50% воткнет её в свой продукт, а может и нет...
Спасибо.



Реп: (328)
Я как разработчик, буду рад сам предоставить ресурсы своих приложений для локализации.
Конечно же, больше всего интересует английский язык! ))
Но и любые другие переводы обязательно добавлю.
Если кому-то интересно, поучаствовать так сказать в геймстроительстве ) пишите в личку!



Реп: (323)
Culibin
После установки новой версии программы все изменения с локализацией пропадут(
Ничего лучшего не придумал, как после перевода программы переведенные файлы бэкапить у себя на компе, после чего, когда появится новая версия программы, опять проверять на изменение языковые файлы, если что-то изменилось - доперевести нужные строки, если нет - сразу копировать в программу
Хотя, как на меня, самый лучший вариант - на е-мейл разработчику, ему же тоже выгодно иметь новые локализации



Реп: (271)
Что-то не хочет у меня подписывать приложение выдает
jarsigner error: java.lang.RuntimeException: keystore load: C:\Documents and Set
tings\Admin\.keystore (═х єфрхЄё  эрщЄш єърчрээ√щ Їрщы)


Сообщение отредактировал Skat01 - 17.05.10, 17:56



Реп: (271)
Все разобрался еще вот нашел {-validity valDays} -- срок годности вашего сертификата. По умолчанию это 180 дней, можно указать больше или меньше -- по вашему усмотрению. пример -validity 365



Реп: (179)
Exception in thread "main" java.lang.RuntimeException: You must set ANDROID_SDK_
HOME variable

выдает это при попытке декомпиляции apk, что это может быть?



Реп: (351)
У меня пункт 14 не работает :sveta:
Прикрепленное изображение

где я не то вписал? :blush:

Сообщение отредактировал 12enie - 17.05.10, 21:50



Реп: (271)
12enie,
Поставь нормальную яву на 80 мб желательно последную



Реп: (323)
kavabunga6 @ 17.5.10, 20:54 *
выдает это при попытке декомпиляции apk, что это может быть?
А можно принт-скрин командной строки?

12enie @ 17.5.10, 21:46 *
где я не то вписал?
У тебя точно Java SE Development Kit установлено? Т.к. по принт-скрину видно, что система не может в той папке найти файл jarsigner.exe, скорей всего его просто там нет....

Сообщение отредактировал MScorpionZ - 17.05.10, 22:18



Реп: (179)
вот:
Прикрепленное изображение


sdk стоит на диске C: в корне =)

Сообщение отредактировал kavabunga6 - 17.05.10, 22:46



Реп: (351)
MScorpionZ,
нет,у меня что-то другое стоит,и jarsigner.exe отсутсвует.просто до этого шага всё шло гладко,вот я и подумал что я молодец.а 80 метров мне дня два качать-неперекачать.может кто подпишет попытку мою? :yes2:
out.apk

Сообщение отредактировал 12enie - 17.05.10, 22:56



Реп: (179)
12enie,
а это тут при чем? apktool то он находит нормально
ну в любом случае не помогло )))

Сообщение отредактировал kavabunga6 - 17.05.10, 22:51



Реп: (18)
по просьбе 12enie
Прикрепленный файлout.apk ( 1.06 МБ )



Реп: (323)
kavabunga6 @ 17.5.10, 22:45 *
sdk стоит на диске C: в корне =)
Явно что-то накосячено с виртуальной машиной
А если попробовать зайти командной строкой в папку "bin", там где установлена Java, и уже оттуда запустить с такими параметрамы:
java -jar %WINDIR%\apktool.jar d C:\Android\Rosie.apk C:\Android2\
Или попробовать переустановить? А то у меня и без sdk все работало....

12enie @ 17.5.10, 22:48 *
может кто подпишет попытку мою?
Вижу уже подписали)

Сообщение отредактировал MScorpionZ - 17.05.10, 23:08
Причина редактирования: Добавил



Реп: (179)
MScorpionZ @ 18.5.10, 0:06 *
Явно что-то накосячено с виртуальной машиной
А если попробовать зайти командной строкой в папку "bin", там где установлена Java, и уже оттуда запустить с такими параметрамы:
java -jar %WINDIR%\apktool.jar d C:\Android\Rosie.apk C:\Android2\


Неа, все равно такой же косяк, переустановка тоже не помогла ))) чудеса блин какие то

Сообщение отредактировал kavabunga6 - 17.05.10, 23:14



Реп: (351)
MScorpionZ,
MScorpionZ @ 18.5.10, 0:06 *
Вижу уже подписали)

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



Реп: (323)
kavabunga6 @ 17.5.10, 23:10 *
Неа, все равно такой же косяк, переустановка тоже не помогла ))) чудеса блин какие то
Ну тогда не знаю, я не настолько хорошо знаком с Java, возможно более знающие помогут

12enie @ 17.5.10, 23:13 *
неее,это я попросил выложить мою не подписаную версию,у меня просто не выкладывалось,я передал ему,а он выложил.подпишите пожалуйста,там лаунчер хороший,должен стать еще лучше,я с графикой поигрался...
Подписал, прикрепил к сообщению ("лицензия" на 1 год)

Прикрепленные файлы

Прикрепленный файлout.apk ( 1.07 МБ )



Реп: (179)
MScorpionZ @ 18.5.10, 0:32 *
Ну тогда не знаю, я не настолько хорошо знаком с Java, возможно более знающие помогут



кажется я понял проблему, сейчас попробую исправить

не помогло )

Сообщение отредактировал kavabunga6 - 17.05.10, 23:47


Полная версия   Текстовая версия

Помощь   Правила

Сейчас: 19.03.24, 08:56