LiteCoding

Заметки о программировании

smali2java: итоги года

without comments

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

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

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

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

Что уже умеет делать smali2java:
1. Разбирать объявления классов, поля, методы, метки, некоторые smali-директивы
2. Понимает 27 команд
3. Разбивает код на блоки (линейно исполняющийся фрагмент кода, имеющий лишь одну точку входа, и заканчивающийся возвратом, безусловным или условным переходом, либо с началом следующего блока)
4. Строит карту использования регистров виртуальной машины в пределах каждого блока, различает 32-битные и 64-битные регистры

Что планируется добавить в ближайшее время:
1. Поддержку аннотаций
2. Увеличить количество понимаемых команд
3. Добавить генерацию java-блоков
4. Добавить рендеринг java-блоков

Выполнение всех этих пунктов будет означать генерацию java-кода из соответствующего smali-кода. С этого момента начнется отсечка версий (начиная с 0.1.0). Версии до 0.5.xx будут все еще в статусе alpha, а beta продлится до версии 0.9.xx.

Другая важная новость — проект переехал с google code на github. Весь актуальный код находится там. Там же можно отслеживать активность разработки проекта.

Третья новость — метрики проекта теперь можно посмотреть на ohloh.


На этом всё. Приятных новогодних и рождественских каникул!

Дмитрий Воробьев,
блогмастер LiteCoding.

Share and Enjoy:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • LinkedIn
  • Tumblr

Written by Дмитрий Воробьев

Вторник, Декабрь 25th, 2012 at 10:02

Leave a Reply

You must be logged in to post a comment.