Ответ
Да, разрабатывал SDK для мобильных приложений. Включал в него модули для аналитики, авторизации и работы с API.
Пример структуры SDK:
class MySdk private constructor() {
companion object {
fun initialize(context: Context, apiKey: String) {
// Инициализация компонентов
}
}
object Analytics {
fun trackEvent(event: String) {
// Отправка события
}
}
}
Учитывал backward compatibility, документацию и примеры интеграции. Тестировал на разных версиях Android и устройствах.
Ответ 18+ 🔞
А, SDK для мобилок делал, да? Ну, это ж классика, ебать мои старые костыли. Каждый второй стартап думает, что ему свой SDK нужен, как воздух. А потом выясняется, что интеграторы — народ ленивый, и если у тебя документация кривая, то твой SDK отправится прямиком в пизду, даже не попрощавшись.
Ну ладно, про структуру. Вот смотри, обычно начинается с какой-нибудь одинокой, блядь, главной классы. Типа MySdk. И чтобы её не накрутили десять раз, делаешь её private constructor(). Умно, да? Чтобы всякие умники не пытались создать экземпляр там, где не надо. А потом — companion object, в нём метод initialize. Это святое. Туда пихаешь контекст и ключ, без этого нихуя не работает. Всё, как у людей.
class MySdk private constructor() {
companion object {
fun initialize(context: Context, apiKey: String) {
// Инициализация компонентов
}
}
Дальше — модули. Ну, типа object Analytics. Чтобы можно было из любого места тыкать MySdk.Analytics.trackEvent("user_pressed_red_button"). Удобно же, ёпта. Не надо никаких сложных зависимостей инжектить, просто вызвал и забыл.
object Analytics {
fun trackEvent(event: String) {
// Отправка события
}
}
}
А вот теперь самое интересное, где обычно все обламываются. Backward compatibility, ёперный театр! Это пиздец какой важный пункт. Подписался ты на новую версию библиотеки в build.gradle, а у тебя всё приложение накрылось медным тазом, потому что я, такой умный, удалил старый метод. И тут начинается: "чё за хуйня, у меня ничего не работает!". Поэтому версии надо продумывать, как оборону крепости. Старое API не трогать, новое — аккуратно добавлять, deprecated ставить, где надо.
Документация — это отдельная песня. Её либо нет, либо она такая, что после прочтения волнение ебать, и хочется всё удалить. Надо писать не для себя, а для того парня, который в три часа ночи пытается это впилить в свой проект. С примерами, с кусками кода, которые можно скопипастить и они сразу заработают. Иначе — пидарас шерстяной, а не разработчик.
И тесты, блядь! Тестировать надо не только на эмуляторе с последней Android 15, но и на каком-нибудь древнем кирпиче, который ещё с Android 6 таскается. Потому что в реальном мире овердохуища таких устройств. И на каждом из них твой SDK должен вести себя прилично, а не выкидывать RuntimeException на ровном месте.
В общем, работа не сказать чтобы простая. С одной стороны, вроде библиотечка, а с другой — ответственность ебать. Потому что если твой SDK глючный, то под раздачу попадут не только твои коллеги, но и куча левых разработчиков, которые потом тебе в ТГ-канал придут с вопросами "какого хуя". Так что делай на совесть, или не делай вообще.