вторник, 6 декабря 2011 г.

Декомпилируем Android приложение

Разберем файл apk.
Создадим новый проект Android приложения. Все оставляем по умолчанию. Запустим его, ну и как обычно видим TextView с надписью "Hello World, ExampleAppActivity!". Теперь разложим приложения.
1) Структура приложения. Для этого нам нужен пакет apktool - http://code.google.com/p/android-apktool. Отсюда качаем файлы apktool-install-windows-r04-brut1.tar.bz2 (или под другую ОСь) и apktool1.4.2.tar.bz2. Распаковываем их в одну папку и настроим путь в нее. Далее используем консоль. Копируем из нашего приложения/bin файл apk (ExampleApp.apk) и даем команду:
apktool d ExampleApp.apk ExampleApp.

Ну теперь имеем  папку ExampleApp - это структура программы. Что мы тут видим -  почти все кроме исходного кода, так как декомпилируем его в smali.
2) Исходный код - нам нужно dex2jar
dex2jar -  http://code.google.com/p/dex2jar/ нужно скачать dex2jar-0.0.9.2-SNAPSHOT.zip (это последняя версия на данный момент). Распаковываем это все в 1-ну папку и настраиваем путь. Далее даем команду dex2jar ExampleApp.apk На выходе имеем jar файл. Ну а дальше делаем с ним что душе угодно
3) Разлаживаем jar
Качаем jd-gui - http://java.decompiler.free.fr/?q=jdgui. Запускаем его и открываем полученный ранее jar файл.

Тут есть одна особенность - на картинке видно что в процедуре setContentView стоит непонятное число, у меня 2130903040. Это идентификатор - зайдите в class R и увидите что под данным числом стоит:
 public static final class layout
  {
    public static final int main = 2130903040;
  }

Вот в принципе и все. Я считаю декомпилирование прекрасным способом учиться. Но при это не забываем про авторское право.



Android Google Maps первое приложение

Это первая моя статья, так что если есть какие то замечания пишем внизу... А критику оставь для себя...
Не так давно решил попробовать попробовать поработать с Google Maps в Android. Самого девайса у меня нет (не зарабатываю Я столько), но попробовать разработать что-то под  Android захотелось.
И так что нам нужно...
1) ключ api для работы с Google Maps
2) Установленная и настроенная SDK
3) Eclipse с установленным плагином  Android
4) Желание

Поехали.
У меня Windows 7 X64 (просьба не фыркать, второй системой стоит CentOS 5 x86). Соответственно Java машина у меня JDK 7 x64. При получении ключа тут вылезли первые бака, сейчас объясню:
нам нужна утилита keytool - находиться она в jre/bin - скрипт для получения:
 keytool -list -alias androiddebugkey -keystore debug.keystore -storepass android -keypass android
что делаем: запуска far, cmd или что то другое. Делаем set path=%PATH%;set path=%path%;"C:\Program Files\Java\jre7\bin\". Переходим в каталог в котором находиться debug.keystore - cd C:\Users\Admin\.android\ и запускаем скрипт:  keytool -list -alias androiddebugkey -keystore debug.keystore -storepass android -keypass android я еще делаю смещение в файл (" keytool -list -alias androiddebugkey -keystore debug.keystore -storepass android -keypass android >> key.txt").
Имеем файл key.txt с данными:


androiddebugkey, 03.10.2011, PrivateKeyEntry,
Certificate fingerprint (MD5): ##:##:##:##:##:##:##:##:##:##:##:##:##:##:##:##

Переходим по ссылке: http://code.google.com/intl/ru-RU/android/maps-api-signup.html , внизу вставляем код и принимаем условия. Нажимаем "Generate API Key" и получаем ошибку. Почему:
а потому что Android работает с x86 системой, соответственно keytool выдает нам неправильный HEX код. Выход - Качаем jre x86 желательно 6-й.  После повторяем все тоже только с установленным  jre
Следующий бок выскочил при созданий нового приложения. По умолчанию я использую версию 2.2. При созданий приложения на чистом sdk такие вещи как Google API не мапируються. Так что при выборе SDK установим Google APIіs Платформы 2.2  Версия 8.
Ну а дальше берем статью http://developer.android.com/guide/tutorials/views/hello-mapview.html и делаем все по статье.