Как отредактировать чужой апк в Android Studio?
Читал, что для работы с приложениями, точнее, над приложениями, используют прогу под названием Android Studio. Но не знаю, как. И плюс было бы круто если бы был способ обойтись без компа, т.е. сделать все с мобилы
Моей целью является "подправить" название пакейджа файла, а заодно и номер версии. Дело в том, что у меня на самсунге камера ну капец лагучая, а вот сторонний софт — очень даже ниче так. И вот я вытащил 2 апк файла, у одного имя com.sec.android.camera, у другого net.sourceforge.opencamera.
Я хочу в OpenCamera’вском манифесте поменять имя пакета и изменить версию, чтобы накатом "обновить" системную камеру до сторонней.
Тогда можно просто скачать исходники с SourceForge и в gradle.build изменить package на нужный Вам. Плюс в манифесте и коде надо автозаменой найти всё связанное с net.sourceforge.opencamera .
Но поверх стандартного приложения оно не встанет, см. в конце ответа.
А ниже общая информация по модификации APK:
Android Studio обычно используется для создания и сборки приложений при наличии исходного кода.
В Вашем случае есть только APK-файл.
Его нужно декомпилировать с помощью ApkTool, а затем вносить изменения.
В каталоге с разобранным приложением будут:
- Ресурсы ( res/* ),
- Код приложения ( smali/ , smali_classes2/ . ),
- Двоичные файлы ( assets/ ),
- Библиотеки, если есть ( lib/<arch>/ ),
- Файлы другого типа, манифест и инфа для apktool ( other , AndroidManifest.xml и apktool.json соответственно).
При этом привычного Java-кода Вы там не встретите, classes.dex "конвертируется" в Smali — это по сути, ассемблер для Android. Чтобы с таким кодом работать, нужно знать его устройство.
А ресурсы и манифест можно спокойно редактировать.
Пакет можно менять и вручную, заменяя все вхождения в manifest.xml и smali, но лучше пользоваться патчерами по типу Batch ApkTool + плагин AllInOne:
- Декомпилировать,
- Запустить AllInOne,
- Поставить ✓флажок на "Клонировать APK",
- Ввести имя пакета,
- Рекомпилировать,
- Подписать.
Но без root-прав камеру поверх стандартной поставить не получится, т.к. не будут совпадать подписи!
Нужно будет применять патч на проверку подписи в packagemanager, например, через LuckyPatcher: Инструменты -> Настройки Xposed -> Включить 2 и 3.
Импорт существующих APK в Android Studio как Project [duplicate]
TelephonyManger.getDeviceId () Возвращает уникальный идентификатор устройства, например IMEI для GSM и MEID или ESN для телефонов CDMA.
Но я рекомендую использовать:
Settings.Secure.ANDROID_ID, который возвращает идентификатор Android в качестве уникальной 64-разрядной шестнадцатеричной строки.
Иногда TelephonyManger.getDeviceId () возвращает null, поэтому для обеспечения уникального идентификатора вы будете используйте этот метод:
16 ответов
Простой способ: использовать онлайн-инструмент http://www.javadecompilers.com/apk , загрузить apk и получить исходный код.
Процедура для декодирования .apk файлов, шаг за шагом:
Шаг 1:
- Создайте новую папку и скопируйте файл .apk, который вы хотите декодировать.
- Теперь переименуйте расширение этого .apk-файла в .zip (например, переименуйте с filename.apk в filename.zip) и сохраните его. Теперь вы можете получить доступ к файлам classes.dex и т. Д. На этом этапе вы можете видеть чертежи, но не файлы xml и java, поэтому продолжайте.
Шаг 2:
- Теперь извлеките этот .zip-файл в ту же папку (или NEW FOLDER).
- Загрузите dex2jar и извлеките его в ту же папку (или NEW FOLDER).
- Переместите файл classes.dex в папку dex2jar.
- Теперь откройте командную строку и смените каталог на эту папку (или NEW FOLDER). Затем напишите d2j-dex2jar classes.dex (для терминала mac или ubuntu write ./d2j-dex2jar.sh classes.dex ) и нажмите enter. Теперь у вас есть файл classes.dex.dex2jar в той же папке.
- Загрузите java decompiler , дважды щелкните по jd-gui, щелкните по открытому файлу и откройте classes.dex .dex2jar из этой папки: теперь вы получаете файлы классов.
- Сохраните все эти файлы классов (в jd-gui, щелкните File -> Save All Sources) по имени src. На этом этапе вы получаете источник java, но файлы .xml по-прежнему не читаются, поэтому продолжайте.
Шаг 3:
Теперь откройте еще одну новую папку
- Вставьте файл .apk, который вы хотите декодировать
- Загрузите последнюю версию apktool И окно установки apktool (обе могут быть загружены из одной и той же ссылки ) и поместите их в ту же папку
- Откройте командное окно
- Теперь запустите команду, например apktool if framework-res.apk и следующую
- apktool d myApp.apk (где myApp.apk обозначает имя файла, которое вы хотите декодировать)
теперь вы получаете папку с файлами в этой папке и можете легко прочитать XML-файлы apk.
Шаг 4:
Это не какой-либо шаг, просто скопируйте содержимое обеих папок (в данном случае и новую папку) в один файл
и наслаждайтесь источником код .
Есть несколько способов сделать это:
- Использовать функцию «Профиль или отладка APK» в Android Studio 3.0. Это позволяет вам открывать и исследовать APK в Android Studio. Классы декомпилируются в smali. Ресурсы не извлекаются, и такие вещи, как «Перейти к определению», «Найти все ссылки» и отладки, не работают без исходного кода (android studio 3.0 canary 9). Некоторые дополнительные функции smali могут работать с smalidea . [/g3]
[/g4]
[/g5] - Используйте jadx . Jadx декомпилирует код в заданном APK для исходных файлов java.
[/g6] - Используйте apktool . Apktool — это инструмент командной строки, который извлекает ресурсы и декомпилирует код в smali для данного apk. Вы также можете перекомпилировать, используя apktool. Вот пример этого в действии:
apktool — это путь. Интернет-служба apktool существует также: http://www.javadecompilers.com/apktool
Некоторые ограничения, очевидно, существуют из-за службы «онлайн-характер»: вы можете извлечь и исследовательские активы и файл манифеста, но невозможно перекомпилировать приложение на данный момент.
Тем не менее, это беспроблемный способ «открыть» приложение для Android.
Apktool для обратной инженерии сторонних, закрытых, бинарных приложений для Android.
Он может декодировать ресурсы до почти первоначальной формы и восстанавливать их после внесения некоторых изменений.
Это позволяет отлаживать smali-код шаг за шагом. Кроме того, упрощается работа с приложением из-за проектной структуры файла и автоматизации некоторых повторяющихся задач, таких как создание apk и т. Д.
Это альтернативное описание — на случай, если кто-то застрял с описанием выше. Выполните следующие шаги:
- загрузите apktool.bat (или apktool для Linux) и apktool_<version>.jar из http://ibotpeaches.github.io/Apktool/install/
- переименуйте файл jar сверху до apktool.jar и поместите оба файла в одну и ту же папку
- откройте поле dos ( cmd.exe ) и перейдите в эту папку; убедитесь, что установлена среда Java (для Linux также проверьте заметки относительно необходимых библиотек)
- Начало: apktool decode [apk file] Промежуточный результат : файлы ресурсов, AndroidManifest.xml
- распаковать файл APK с распаковщиком по вашему выбору Промежуточный результат : classes.dex
- загрузить и извлечь dex2jar-0.0.9.15.zip из http://code.google .com / p / dex2jar / downloads / detail? name = dex2jar-0.0.9.15.zip & amp; can = 2 & amp; q =
- перетащить classes.dex на dex2jar.bat (или введите <path_to>\dex2jar.bat classes.dex в поле DOS, для Linux используйте dex2jar.sh ) Промежуточный результат : classes_dex2jar.jar
- unpack classes_dex2jar.jar (может быть необязательным в зависимости от используемого декомпилятора)
- декомпилировать ваши файлы классов (например, с помощью JD-GUI или DJ Decompiler ) Результат : исходный код
Примечание: не разрешается декомпилировать пакеты сторонних поставщиков; это руководство предназначено для восстановления личного исходного кода только из файла APK; наконец, полученный код, скорее всего, будет запутан
В Play Store есть новое приложение, с помощью которого можно декомпилировать apk (системные приложения) и просмотреть исходный код прямо на вашем смартфоне. Он сохраняет файлы на SD-карте, чтобы вы могли просматривать их на своем компьютере. Это не требует root или что-то еще.
Просто установите и получайте удовольствие. Я думаю, что это самый простой способ декомпилировать приложение.
Я лично рекомендую Show Java Android App получить исходный код. Вы можете загрузить его из магазина воспроизведения или из здесь
Я покажу вам другой способ декомпилировать файлы .apk.
Вы можете выполнить первые 2 шага от «prankul garg». Итак, у вас есть еще одна возможность:
Загрузите «JD-GUI», который легко найти. Откройте файл .jar в «jd-gui.exe». (Файл> Открыть файл> ‘нашел ваш .jar-файл’). После этой процедуры вы можете сохранить все ресурсы в файле .zip.
1st — вам нужно переименовать файл .apk в .zip
2nd — вам нужно декодировать файл .dex (если хотите, декодировать файл .apk в dex2jar, это возможно)
3rd — вам нужно декодировать файл .jar с JD-GUI
Вы можете попробовать DexPatcher . Он даже интегрируется с Android Studio. Он использует внутренние функции Apktool и Dex2Jar . Вы также можете использовать эти инструменты самостоятельно. Apktool декомпилирует apk и извлекает файлы .dex, которые могут быть затем преобразованы в jar с использованием Dex2Jar. Jar можно декомпилировать с помощью JD-GUI . Вы можете увидеть Java-код с помощью этого инструмента. Хотя сходство декомпилированного кода с реальным кодом не может быть гарантировано. На рынке доступны некоторые усовершенствованные инструменты [f5] obfuscation , которые испортили код, чтобы затруднить декомпиляцию / понимание. например. Proguard
Этот сайт https://www.apkdecompilers.com/ сделал это автоматически.
Сначала я попробовал сайт, упомянутый в принятом ответе, но это не сработало я.
apktool — лучшее, что вы можете попробовать. Я сохранил некоторые xml с ним, но, честно говоря, я не знаю, как это будет работать с кодом .java.
Я бы рекомендовал вам иметь репозиторий кода, даже если ваш единственный кодер. Я использовал Project Locker для своих собственных проектов. Это дает вам бесплатные svn и git repos.
apktool будет работать. Вам даже не нужно знать хранилище ключей, чтобы извлечь исходный код (что немного страшно). Основной недостаток заключается в том, что источник представлен в формате Smali вместо Java. Другие файлы, такие как значок и main.xml, проходят отлично, хотя, возможно, стоит потратить время, чтобы хотя бы восстановить их. В конечном итоге вам, скорее всего, придется перезаписать Java-код с нуля.
Здесь вы можете найти apktool здесь . Просто скачайте apktool и соответствующий помощник (для Windows, Linux или Mac OS). Я рекомендую использовать такой инструмент, как 7-zip, чтобы распаковать их.
Хотя вы можете декомпилировать ваш файл APK , вы, вероятно, попадете в одну большую проблему:
он не вернет код, который вы написали. Вместо этого он будет возвращать все, что встраивается компилятором, с переменными, заданными случайными именами, а также функциями, заданными случайными именами. Это может занять значительно больше времени, чтобы попытаться декомпилировать и восстановить его в коде, который у вас был, чем начать.
К сожалению, такие вещи убили много проектов. В будущем я настоятельно рекомендую изучить систему управления версиями, такую как CVS, SVN и git и т. Д.
и как ее создать.
В этих двух статьях описывается, как объединить использование apktool и dex2jar , чтобы взять файл APK и создать проект Eclipse, который может его создавать и запускать.
Декомпиляция apk: туда и обратно
Распаковываем и устанавливаем platform-tools и build-tools для последнего релиза Android. Соответствие имени релиза, версии Android и значению Android API можно посмотреть на https://source.android.com/source/build-numbers
> tools\bin\sdkmanager.bat —list
build-tools;25.0.2 | 25.0.2 | Android SDK Build-Tools 25.0.2
build-tools;25.0.3 | 25.0.3 | Android SDK Build-Tools 25.0.3
cmake;3.6.3155560 | 3.6.3155560 | CMake 3.6.3155560
> tools\bin\sdkmanager.bat «build-tools;25.0.3» «platform-tools»
Далее получаем на руки apk-шку, которую будем препарировать. Название пакета можно взять из адресной строки браузера, открыв страницу с программой на Play Market. Далее ищем и вытаскиваем архив через adb (root не требуется).
Пусть например, для программы «Sample Foobar» имя пакета будет com.example.foobar
> adb devices
List of devices attached
> adb shell «pm list packages -f -3 | grep com.example.foobar»
> adb pull /data/app/com.example.foobar-1.apk
/data/app/com.example.foobar-1.apk: 1 file pulled. 3.0 MB/s (39955506 bytes in 12.719s)
С сайта https://ibotpeaches.github.io/Apktool/ забираем и устанавливаем apktool, который умеет декомпилировать архив apk в набор файлов и обратно.
> java -jar apktool_2.2.2.jar d -o foobar_src com.example.foobar-1.apk
Декомпилированный код будет в формате smali — синтаксис и краткая справка на офсайте https://github.com/JesusFreke/smali/wiki. Описание команд можно посмотреть на http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html или на официальном сайте Android https://source.android.com/devices/tech/dalvik/dalvik-bytecode
Уже можно изучать исходный код. В Notepad++ можно добавить подсветку синтаксиса smali с https://forum.xda-developers.com/showthread.php?t=2760141, а для IntelliJ Idea недавно вышел плагин https://github.com/JesusFreke/smali/wiki/smalidea, который, по заявлению автора, даже позволяет отлаживать приложение на телефоне через ddms (проверять это я, конечно, не буду.)
Можно облегчить себе изучение кода, попробовав декомпилировать apk в исходный код на Java, но надо иметь в виду, что с вероятностью в 99.5% код получится нерабочий и его невозможно будет скомпилировать обратно в apk. В зависимости от фазы Луны и погоды на Марсе, в таком коде будут присутствовать совершенно дикие конструкции типа for (;;)
> dex2jar-2.0\d2j-dex2jar -os -ts -r com.example.foobar-1.apk
На выходе имеем com.example.foobar-1-dex2jar.jar. Запускаем jd-gui и открываем в нем этот jar:
> java -jar jd-gui-1.4.0.jar
Можно изучать код прямо в jd-gui, а можно экспортировать весь Java-код через меню File -> Save all sources.
После того, как поизучали, добавили нужное и удалили ненужное, собираем обратно smali в apk:
> java -jar apktool_2.2.2.jar b -o foobar_unaligned.apk foobar_src
Выравниваем запакованные файлы по 4-байтовой границе:
> build-tools\25.0.3\zipalign 4 foobar_unaligned.apk foobar_fixed.apk
Если ещё нет своего keystore, то его можно сделать с помощью программы keytool.exe, которая входит в состав JRE:
> keytool -keystore android_keystore.jks -genkey -alias recompile
Далее подписываем apk, используя сертификат из своего keystore. Указываем такое же значение min-sdk-version, как указано в исходнике foobar_src\apktool.yml, в параметре minSdkVersion:
> build-tools\25.0.3\apksigner sign —ks android_keystore.jks —min-sdk-version 14 foobar_fixed.apk
Перед тем, как ставить обновленную apk, надо вручную удалить оригинальную программу, если она установлена, так как оригинал и переделанная версия подписаны разными ключами.
Сейчас 2022 год, актуальная верзия API 32, и здесь sdkmanager переехал в cmdline-tools\latest\bin\sdkmanager.bat
А мне было полезно, плюсану
Сейчас 2022 год, актуальная верзия API 32, и здесь sdkmanager переехал в cmdline-tools\latest\bin\sdkmanager.bat
@moderator, добавьте пожалуйста эти простые, но в то же время полезные слова в конец поста.
думаю тут будет актуален тег «реверс-инжиниринг».
на 4пда, этих памяток .

Тайная жизнь Android разработчика в санкциях. Часть #1
Привет, пикабуняне. Миллион тысяч лет прошло с тех пор, как я решился опубликовать пост (или несколько) в своем тематическом сообществе, который посвящен Android приложениям.
Прошлый год был тяжелым по всем фронтам для андроид девелоперов всех мастей — это и отключение монетизации, недоступность (или скорый уход) зарубежных сервисов, письма «счастья» от должника в виде Google, и все это казалось (да и кажется) нескончаемым комом.
Для ЛЛ — это цикл постов о том, как мы попробуем с нуля написать приложение, интегрировать его с Российскими сервисами, и учесть все юридические тонкости, соблюдая закон.
Начнем издалека — сначала покажу письмо нашего локального должника, которые получили.. ну помоему все причастные (содержание у всех одинаковое, о нем ниже):

а затем скрин моего заработка за прошлый год (точнее то что от него осталось) по версии подключаемого, и не основного на тот момент SDK от Яндекса:

Так вот, что важно знать о Google, и зачем вообще нам (разработчикам / владельцам аккаунтов) присылали письма — мы вам должны, но мы вам все прощаем. Уместной будет и цитата
было бы так смешно, если бы не было так грустно
И в целом уже всем стало понятно, что про деньги из Google фактически можно забыть, также как и про выводы на какой нибудь условный Payoneer, или его аналог, т.к. если не ошибаюсь все лазейки прикрыты.
Кстати, давайте познакомимся еще раз.

ТС — скромный разработчик (любитель) Android приложений, который посвящает этому занятию свободное время от основной работы.
Вводные сведения
До наступления часа Х на принадлежащем аккаунте в магазине Google Play существовало (да и сейчас остались) несколько приложений, которые приносили небольшой, но стабильный доход от просмотра рекламы, или встроенных покупок.
За это гугл каждый месяц переводил денежку, в дальнейшем за нее уплачивались налоги, а американские президенты переводились в нужную валюту, или просто копились. Ляпота!
Проблем получилось несколько. Первая, вылилась, разумеется в денежном.. отсутствии. Как заработать в нынешних реалиях, при этом не опуститься до уровня сайтов Mail.ру (где в каждом окне по пятку баннеров), и опубликоваться в новых сторах, попутно соблюдая закон, как и раньше.
Вторая проблема, скорее техническая. Как подготовить основу для работы приложения в урезанных реалиях, т.к. локальный рынок.. пока пестрит своей пустотой. Это и про облачные БД, и про push уведомления, и сервисы авторизации и регистрации, которых либо не представлено в каком то едином (коробочном) решении, либо непозволительно дорогие по своей натуре. Такую проблему мы будем решать по ходу написания приложения, вначале взяв что нибудь попроще, более «лайтовое».
Третья проблема — это отключение некоторых библиотек и сервисов, которые были доступны ранее. Для примера Firebase: если у приложения, подключенного к нему вырастала нагрузка (а заплатить ты не можешь), оно просто «вешается», и перестает работать до следующего расчетного периода. Такую ситуацию наверное не будем рассматривать детально, т.к. все сводится к тому, что надо подключать другие решения, а затем обновлять приложение
Разумеется, можно купить свой VPS, развернуть на нем какой нибудь условный Parse сервер, и «плясать» от него, но в последнее время наблюдалась (и продолжает активничать) группа пакостников в GitHub, которые «загадили» половину пакетов, и от этого становится как то не весело. Поэтому такой вариант пока пропустим
Что будем делать:
Постараюсь начать серию постов, начиная с текущего, и доступными словами рассказать про ключевые этапы создания приложения, и что важно, прохождение этапов по регистрации в сервисах, которые нам необходимы для получения дохода на текущий момент через мобильные приложения, с соблюдением действующего законодательства.
Писать, кстати, будем на дельфинчике (мало ли, может кто то еще пользуется Eclipse)

Будет как и неинтересная информация (код), так и общеполезная (подача заявки в магазины приложений)
Важно! Многие из описанных ситуаций многие наверняка уже знают, или прошли, и кто-то имеет и статус самозанятого, и доступ к регистрации в локальных магазинах приложений. Не обижайтесь на это. Моя цель — показать пошагово, как бы мы действовали в обычной ситуации, не имея ничего из перечисленного:
Подготовка устройств для работы и тестирования, концепция приложения
Регистрация самозанятого + регистрация в Ю.Касса + регистрация в RuStore
Выбор медийных площадок и интеграция
Пакеты и библиотеки, которыми будем (и которыми можно) пользоваться
Написание каркаса приложения, верстка основных экранов
Условная логика без подключения к БД
Графические материалы, баннеры для магазинов
P.S. Никаких ссылок не даю, т.к. никто не любит рекламу, также как и не прошу подписаться на телегу. А вот символ рубля в конце поста я оставлю — для тех, кому написанное окажется немного полезным.
Как стать Android разработчиком в 2023

И так, давайте начнем с того, что должен знать и уметь человек, чтобы стать Android разработчиком? Скиллсет будем смотреть по вот этому Roadmap
Основные компоненты Android
Работа с многопоточностью
Agile, таск-треккеры, документация
Далее будет разбор каждого из пунктов с курсами/книгами/материалами для изучения. Это будет моя личная субъективная подборка, не является рекламой)
Kotlin
Каждый год я делал подобные статьи и всегда писал, что нужно изучать Kotlin, с оговоркой, что есть Java и начинать нужно с нее и, кажется в 2023 году Java уже практически полностью потеряла актуальность в Android разработке. Проектов на Java уже не осталось, но на собеседованиях деды все еще любят поспрашивать «А как оно там работает?». Практической пользы в изучении Java стало меньше, но это все еще очень полезно для общего понимания.
И так, как изучать Kotlin? Есть два основных ресурса https://kotlinlang.org/ и его аналог на русском https://kotlinlang.ru/ . Для того чтобы изучать язык даже не потребуется компьютер, потому что у языка есть отличный Playground, который позволяет запускать программы в браузере и оттачивать свои навыки даже с мобильного телефона. Вам необходимо полностью проштудировать эти ресурсы
Так же очень полезно будет просмотреть этот видео-урок про Kotlin
В формате книги наиболее актуален «Kotlin in action» Дмитрий Жемеров, Светлана Исакова

Основные компоненты Android
Основных компонентов в Android 4 — это Activity, Service, Broadcast Receiver, Content Provider. Называются они основными поскольку они могут являться точками входа в ваше будущее приложение. Нам нужно разобраться что они делают и для чего они нужны.
Про работу Activity и прочих UI компонентов рекомендую это видео
Про работу Service — видео
Со всеми компонентами нужно попрактиковаться и посмотреть как они работают
Верстка
Сейчас переломный момент — существует два подхода к верстке: XML и Compose. В моменте, практически все проекты все еще написаны на XML и Compose сейчас можно встретить довольно редко в коммерческой разработке, но тут все динамично меняется и, думаю, к концу года уже большое количество компаний будет использовать оба подхода либо уже полностью перейдут на верстку через Jetpack Compose
Для изучения подхода к верстке через XML отлично подойдет это видео.
Для изучения Compose лучше всего подойдут официальные туториалы от Google, Видео-курс Алексея Гладкова, а так же вот такой репозиторий с кучей полезных ссылок для изучения Compose.
Работа с сетью
Существует несколько подходов к построению сетевого взаимодействия: REST, SOAP, RPC, GraphQL. В вашем проекте может использоваться любой, но чаще всего это будет REST. Обязательно нужно изучить базовые концепции этого подхода. Исчерпывающей статьи на эту тему у меня нет, поэтому тут придется погуглить и почитать все подряд для того, чтобы сформировались общие знания. Для более базового понимания как все это работает советую изучить Сетевую модель OSI
И так, на проекте у вас скорее всего будет REST и одна из основных Android-библиотек: либо Okhttp+Retrofit, либо Ktor.
Так же вам нужно будет изучить как работает сериализация в Android. В чем разница Serializable от Parcelable и попрактиковаться с одной из библиотек, которая позволяет сериализовать Json в Kotlin и наоборот. Библиотек много, но по факту все делают примерно одно и тоже, но с разной степенью эффективности. Названия библиотек — Kotlin Serialization, Gson, Jackson. В целом, для изучения особой разницы нет — берите любую
Работа с базой данных
В андроид есть две основные БД Sqlite (Room), Realm. Google продвигает библиотеку Room, а значит скорее всего на своей потенциальной работе вы скорее всего будете использовать именно его.
Базово этих знаний будет достаточно для разработки, если вы хотите понять как все это работает значительно глубже советую отложить себе в закладки книжку с кабанчиком. Небольшой спойлер — для новичка она будет неподъемной, и вы будете возвращаться к ней и перечитывать еще несколько лет подряд, после того как найдете работу

Работа с многопоточностью
В Android есть три основных подхода к многопоточности: нативные Thread, RxJava, Kotlin Coroutines. Здесь вам нужно обязательно выучить базовые концепции многопоточности. Выбор между RxJava и Kotlin Coroutines довольно сложный, в идеале надо на базовом уровне уметь пользоваться обеими библиотеками, поскольку компании все еще используют разные подходы, и универсального решения тут нет.
Книга для изучения базовых концепций

Работа в фоне
Важно изучить способы запуска задач фоново через Service и Workmanager, методы обмена данными между этими задачами и основным приложением, а так же ограничения, которые есть в системе Android. Видео-урок на эти темы
Виды архитектур
Это самая холиварная тема, архитектур довольно много, универсального и правильного решения нет — каждый развлекается как он хочет. Вам важно разобраться в базовых концепциях MVC/MVP/MVVM/MVI, понять как они работают и попрактиковаться в реализации. Видео-урок об основных архитектурах. После просмотра рекомендую зайти на Github и в просто скачать основные реализации по поисковым запросам MVP Android, MVVM Android, MVI Android etc. Так же нужно разобраться с основными концепциями SOLID, DRY, KISS, Clean Architecture и основными паттернами программирования
В Android довольно много реализаций Dependency Injection: Dagger, Hilt, Koin, Toothpick, ручное создание DI через фабрики. Я считаю, что правильнее всего разобраться с Dagger, это наиболее сложная реализация, но если вы поймете эти концепции, разобраться как работают другие библиотеки — труда не составит
Анимации
Чаще всего эту тему опускают, потому что в большинстве компаний нет времени на укарашалки в виде анимаций и, скорее всего, для старта можно эту тему изучать и вернуться к ней чуть позже, но, в любом случае, моя задача предоставить материалы для изучения
Тестирование
Аналогично предыдущей теме, с написанием Unit/UI тестов вы стоклнетесь только, если придете в достаточно крутую компанию, которая уделяет время качеству приложений. В небольших командах на 2-5 разработчика, чаще всего написание тестов экономически нецелесообразно, поэтому в очень многих компаниях тесты практически не пишут
Видео урок про тестирование в двух частях Part 1 и Part 2
Обычно для начала работы достаточно разобраться с базовыми операциями — clone, pull, checkout, add, commit, push, cherry-pick. Просто заводим приватный репозиторий на Github и пробуем выполнять все команды
У Git-a есть прекрасная документация, где есть абсолютно все, что нужно
Agile, таск трекеры, докментация и тд
Чаще всего у компаний свое представление и реализация Agile/Scrum, поэтому об этом вам скорее всего уже расскажут, после того как вы устроитесь на работу. Базовые концепции Scrum можно прочитать вот в этой книжке

Либо в более короткой версии Scrum guide
Таск треккеры, сервисы документации — некоторые компании требуют чтобы у вас был опыт работы с Jira, Confluence, Trello и тд. Какой в этом практический смысл — не знаю, вся задача разработчика при работе с таск-трекером это своевременно двигать задачки из колонки слева в колонки справа. Какие-то более сложные настройки на старте вам все равно не доверят, поэтому советую просто запустить любую демо версию таск-трекера и посмотреть какие функции у него есть. По сервисам документации — аналогично, вести в них документацию не сложнее, чем писать ее в Word
Практика
И теперь самое важное, мы изучили все теоретические материалы и теперь нам нужно отточить практические навыки. Работодатель будет требовать от вас примеры работ, но где их взять? Начать стоит с разработки стандартных приложений — Cinema App, Weather App, Currency Converter etc. Для этого идем на Behance (либо любой другой сервис с дизайн макетами), вводим там одно из вышеперечисленных названий и ищем макеты. Находим открытую API платформу, ссылок тут уже не будет — если вы изучили все вышеперечисленное и дошли до этого момента, то скорее всего вы справитесь с этой задачей без моей помощи 🙂
Берем API, берем макеты и начинаем кодить! Пробуем реализовывать разные подходы, все это оставляем в своем портфолио на Github, когда вы пойдете на собеседование и вас попросят реализовать тестовое задание, то у вас скорее всего уже будет готовая реализация на их задачу и вы сразу же будете в более выгодном положении на фоне других кандидатов.
По ходу изучения всего этого материала, вы, однозначно, столкнетесь с кучей разнообразных проблем — это нормально, все мы когда-то сидели и тупили над элементарными вещами. Главное делать, практиковаться и не останавливаться
Для тех, кто дочитал до конца, хотел бы запустить небольшой эксперимент: вы делаете любой тестовый проект — я помогаю его вам доработать до приемлемого состояния. Не знаю какой будет спрос, но на всякий случай ограничиваю первыми пятью, кто разработает приложение и напишет мне — https://t.me/se_development 🙂

Приложение для ведения дневника автоматических мыслей. Обновление
В предыдущих постах (около года назад) я выкладывал мобильное приложение для ведения дневника автоматических мыслей из когнитивно-поведенческой терапии.
Приложение два года назад начали делать мы с @Wasteoid, оно не показывает рекламу, не лезет в Интернет без разрешения, уважительно относится к Вашей приватности, полностью бесплатно. Оно представляет собой мобильный настраиваемый дневник автоматических мыслей из книг Дэвида Бернса и Мэтью Маккея. Многие, занимающиеся КПТ, ведут такой на бумаге или в Word-файле. Мы предлагаем использовать для этого смартфон.

Сегодня мы представляем новую версию.
К сожалению в ней нет каких-то вау-нововведений, зато:
+ Добавлена сырая возможность подсказывать когнитивные искажения на основе текста вводимого в графу «Автоматическая мысль». (включается в настройках).
+ Исправлена проблема с Goolge Drive, которая могла быть в прошлой версии.
+ Сделана защита от случайного стирания текста.
Буду рад отзывам и предложениям в комментариях.
P.S. на версию для IPhone нет сил и знаний, к сожалению.
Мое первое приложение на андроиде
Справа макет, который предоставил заказчик и объяснил свое виденье того, как это должно работать.
Слева — реализация.
Белый квадрат на 4 кнопке — отсутствие данных в ТЗ
В итоге, заказчик остался доволен

EnLearner
Для ЛЛ: приложение для Aндроид без рекламы, регистрации и смс, оффлайн и онлайн словарь с возможностью изучения и повторения новых слов. Быстрое добавление новых слов с помощью утилиты для Windows. Все ссылки есть в конце поста.
Немного истории из жизни. Следующие 4 абзаца можно не читать — по функционалу дальше.
Мне нравится учить английский. И когда-то давно я почему-то не нашёл удобного приложения для создания и редактирования своих списков слов и решил сделать своё. «Когда-то давно» — это ещё на заре Андроид 2.3 (тогда на самом деле приложений было ещё не так много). В то время я работал инженером-конструктором, и, хотя работа нравилась, на зп рядового конструктора в провинциальном городке можно было позволить себе не так много. Надо было что-то с этим делать, и я пошёл за вторым образованием. Тогда я ещё не знал, что, в принципе, для работы программистом можно обойтись и без него. Хе-хе. А в качестве диплома, я, собственно, и выбрал написание приложения для изучения и повторения, и вот это всё. Конечно, практически ничего из кода я написать не успел, а диплом ограничился анализом рынка, зачем это вообще нужно, и тех. заданием. Тем более, руководитель сразу сказал, что главное — это бумага. Бумага была. *и так сойдёт* Уже после защиты, я клятвенно пообещал ему довести приложение до ума. И, возможно, это одна из причин, по которой каждый раз, решив бросить всё, я возвращался.
Сразу оговорюсь, что профессионально никогда не занимался разработкой под Андроид и до сих пор варюсь в собственной кухне, так что, если пост будет читать кто-то в теме, просьба писать критику (желательно, конструктивную) в комментариях — в приложении ещё есть много, что можно улучшить и поправить. О чём-то я знаю, а о чём-то — нет. Ошибок тоже хватает, т.к., если разработка и тестирование проходит в одно лицо, обычно получается не очень. Помогают пользователи 4pda, за что им огромное спасибо!
Начал заниматься приложением в 2011-ом в свободное от работы время. Тогда казалось, что ну за полгода-то уж точно можно сделать что-то адекватное. И вот уже 2022-ой. Вообще, не совсем так конечно, т.к. были большие перерывы — каждая смена места работы, и приложение откладывалось минимум на полгода. Были периоды, когда казалось, что всё тлен, и никому это не нужно. Ну, и Гугл не даёт скучать — что-то переделывалось уже по несколько раз. А, возможно, я просто такой себе программист. *лиса на стуле*
В итоге, после того как ушёл с предыдущего места работы, решил, что пусть на макарошках, но нужно доделать начатое, чем, собственно, и занимался до сегодняшнего дня. Развитие приложения в более-менее нормальном виде можно посмотреть на 4pda.
Почему EnLearner? Потому что с креативностью у меня так себе, а en — это english, а learner — это learner. Но другие языки тоже поддерживаются, так что, ну называется и называется.
Итак, в целом по функционалу.
— оффлайн словарь с поддержкой файлов в форматах .dsl, .xdxf;
— на данный момент доступны для скачивания словари для английского, немецкого, французского, итальянского, испанского, китайского, польского, украинского, белорусского, датского языков;
— поддержка онлайн-словарей: Яндекс.Словарь, Glosbe, Tatoeba, Urban Dictionary;
— создание собственных списков слов;
— возможность изучения и повторения иностранных слов с помощью карточек и упражнений;
— настраиваемый график повторений, основанный на кривой забывания Эббингауза;
— повторение слов при помощи всплывающих упражнений (при разблокировке экрана телефона);
— экспорт и импорт пользовательских словарей в файлы .txt, .xlsx;
— настраиваемые темы интерфейса;
— синхронизация пользовательских словарей с помощью Google Drive;
— всплывающая кнопка быстрого перевода скопированного в буфер текста (Android 9 и ниже);
— быстрое добавление новых слов и редактирование списков слов с помощью утилиты для Windows (можно скачать на сайте или на 4pda)
При первом запуске нужно будет ввести немного базовых настроек: цветовая схема, родной и изучаемый язык и др.
Главная форма приложения состоит из 3 вкладок: поиск в базовых словарях, текущий список слов в изучении, список своих словарей для изучения.

Поиск в базовых словарях — это поиск слова в подключённых базовых словарях (онлайн и оффлайн), управлять которыми можно через соответствующий пункт главного меню. Начинаем писать в поле ввода слово, показывается список найденных слов, при нажатии на слово открывается набор статей в базовых словарях — всё как обычно. Если родной или изучаемый язык на кириллице, то направление перевода определяется автоматически. Если изучаете несколько языков, можно быстро переключиться на другой язык с помощью долгого нажатия на кнопку направления перевода.
Текущий список слов в изучении — это набор слов из выбранных пользовательских словарей. На основе этого списка строится график повторений и уведомлений. Есть возможность сортировки (в т.ч. ручной), поиска, удаления и добавления новых слов.
По нажатию на слово открывается карточка слова с возможностью редактирования перевода, транскрипции, примеров и добавления изображений из галереи, камеры или Гугл-картинок с помощью браузера.
Список своих словарей для изучения — набор пользовательских списков слов. Можно добавлять, удалять и изменять порядок словарей. Каждый словарь можно открыть для редактирования в нём слов, либо запустить упражнения только для слов этого словаря.
На форме доступен список «Избранное» — сюда можно поместить любые слова (например, которые особо плохо запоминаются) и повторять их отдельно.
В «Изученное» попадают слова, набравшие максимальное количество баллов в процессе изучения, и, собственно, считающиеся изученными.
«Слово дня» — это список слов, которые Вы, возможно, захотите выучить в будущем. Для английского доступен список из 5000 слов, разделенный по уровню владения языком на три части. В планах добавить списки и для других языков. Сейчас их можно импортировать из файла .txt или .xlsx.

Конечно, есть и упражнения для повторения слов.

Коротко как-то так. Также по функционалу можно почитать в справке в самом приложении.
Чуть больше картинок с описанием можно посмотреть на сайте.
Кроме реализации текущих просьб пользователей, планов ещё много:
— поддержка большего числа языков;
— улучшение работы с оффлайн словарями (в частности, поддержка звуков и изображений для dsl);
— поддержка большего числа форматов базовых словарей;
— реализация полнотекстового поиска по словарям;
— подключение словарей морфем и предложение вариантов при неправильном написании слова;
— подключение других онлайн словарей, в частности Wiktionary;
— разработка и переход с Гугл Драйв на нормальный сервис для синхронизации списков слов;
— расширить набор упражнений для повторения;
— включить несколько игр, чтобы просто позалипать, типа hangman;
— готовые наборы списков слов для изучения по темам.
Повторюсь, что есть ошибки, которые будут исправляться. Сейчас нужно понять, есть ли вообще смысл дальше развивать приложение, потому что за время разработки на маркете появилось множество подобных приложений, с частью из которых конкурировать просто не имеет смысла.
Приложение бесплатное и без рекламы. Есть кнопка «Поддержать».
Спасибо, что дочитали! Буду рад, если EnLearner кому-то пригодится. Пишите пожелания и предложения — по возможности постараюсь реализовать.