Как стать автором
Обновить

Комментарии 13

Кстати, а существуют ли клиенты на Java, которые напрямую общаются через MTProto? Например, как pyrogram или telethon? Я пытался что-то такое найти, но нашёл лишь какую-то очень старую библиотеку с устаревшим layer (62, емнип).

Да, в этой статье как раз такой клиент построен :) Т.е. мы собираем нативную библиотеку td_api из официального репозитория telegram, которую после подключаем. В итоге мы можем строить свой полноценный клиент, подключение идет через MTProto, доступно все api. Разве что только на сторонние клиенты telegram может накладывать некоторые ограничения, например, первоначальная регистрация в telegram возможна только в одном из официальных приложений.

Вот тут можно посмотреть инструкции от разработчиков telegram для java.

Только это не нативный mtproto на java, про который был вопрос. Но, в целом, сейчас имеет смысл брать tdlib и интегрироваться через jna, jnr-ffi или, как здесь, jni (что, конечно, дополнительная боль).

Да, я неправильно понял. Реализации mtproto на java тут нет, это предоставляет tdlib.

Есть библиотека kotlogram для 133 layer, для java публично нет

Есть вот такое довольно свежее в разработке нативное для Java решение: https://github.com/Telegram4J/Telegram4J

Гм...

А чем это отличается от использования вполне рабочей библиотеки?

<dependency>
            <groupId>it.tdlight</groupId>
            <artifactId>tdlight-java</artifactId>
        </dependency>
        <dependency>
            <groupId>it.tdlight</groupId>
            <artifactId>tdlight-natives-linux-amd64</artifactId>
        </dependency>

Здесь я сделал акцент на реализацию клиента в виде spring-boot-starter и удобство использования в spring-boot проектах, постарался добавить некоторую функциональность с учетом возможностей spring. Ну и хотелось самому иметь возможность оперативно вносить изменения при появлени новой версии библиотеки. Как результат - решил поделиться своим опытом)

tdlight-java - отличный проект!

Как бы и куда бы я не подпихивал эту библиотеку, всегда получаю java.lang.UnsatisfiedLinkError: no tdjni in java.library.path: /Users/andreyka/Library/Java/Extensions:/Library/Java/Extensions:........

При запуске приложения нужно указать jvm-свойство пути до нативных библиотек

-Djava.library.path=/ваш/каталог. В данном каталоге должна находиться библиотека. У вас java при старте смотрит в дефолтный для mac os каталог /Library/Java/Extensions

Самое интересное если подсунуть в любой из этих катологовUsers/andreyka/Library/Java/Extensions:/Library/Java/Extensions, либа не подхватывается. И с -Djava.library.path она тоже не подхватывалась пока я локально не собрал по инструкции https://tdlib.github.io/td/build.html?language=Java. Только после этого подхватилась либа. Но если то, что я собрал подсунуть в либы , то получаю Can't find class [org/drinkless/tdlib/Client]. Если подсовываю Вашу либу то ок. Из этого делаю вывод, что надо пакет менять при сборке либы, о чем к сожалению и как ни у Вас ни в инструкции не указано

Да, всё верно. Если пакет с классами меняется, то это нужно учесть при сборке tdjni(библиотеки в проекте собраны с учётом этого). В ближайшее время я постараюсь добавить описание в репозиторий. Пока можете воспользоваться этой инструкцией.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории