美文网首页Android开发经验谈Android开发Android开发
在Android Studio上编译自己的Telegram

在Android Studio上编译自己的Telegram

作者: Giorno_Giovanna | 来源:发表于2018-06-02 22:32 被阅读117次
icon.png

在国内的人可能对Telegram了解的不多,因为用的多的还是微信QQ。所以,在开始这篇文章之前,我先引用维基百科上的内容介绍一下telegram。

历史

它在2013年由杜洛夫兄弟正式激活,也就是尼古拉·杜洛夫与保罗·杜洛夫,俄罗斯最大的社交网络服务VKontakte的创始者。
Telegram Messenger LLP是独立的非营利公司,设立在柏林,而且与VKontakte毫无关系。尼古拉·杜洛夫为它设计新的网络传输协议称为MTProto,同时保罗·杜洛夫自数字堡垒公司提供资金与基础设备。在2013年10月的统计,每日有10万名用户在在线活动。在2016年2月,官方宣称突破一亿月活跃用户,而且每日有 150 亿消息在传递。

活跃人数

2013年10月,Telegram每天有10万活跃用户数。2014年3月24日,Telegram公布其服务分别已达到每月3500万活跃用户数和每日1500万活跃用户数。2015年9月,发表声明,表示该应用程序有6000万活跃用户数和日常消息传递有120亿。2016年2月Telegram公布他们每月有1亿活跃用户数,每天有35万新用户注册数,每日传递150亿则消息。
—— —— 维基百科Telegram

以上是维基百科上对Telegram的介绍,而在我看来Telegram和微信QQ最大区别在于,它是完全免费和开源的。是的,没有任何的广告。并且拥有自己独立的加密算法,重视用户安全和隐私,所以在国外用的人还是挺多,可惜在国内被墙了。
那么说回正题,作为每天传递150亿消息的一款IM,它的源代码就放在github上,任何人都可以遵循它的规则,从github上获取telegram app的源代码

github.png
那么接下来,我将以Android为例,在Android studio中编译自己的telegram。在写这篇文章之前,我搜了一下国内的blog,虽然有讲到telegram编译的,但似乎一笔带过了,讲的不够详细,不知道意义何在。。。国外倒是有一篇比较详细的文章,讲如何编译的,如果你没有耐心读完,可以移步这里:Building Telegram-Android 。但不管怎样,请确保你的手机和电脑都能科学上网,因为后面要申请telegram的apiid,申请google service,并且telegram本身也是基于gcm的

首先打开telegram的android项目 的github:


android.png

telegram欢迎开发者用他们的源码和api在他们的平台上开发自己的app,但要注意以下几点:

  1. 申请apiid
  2. 不要使用telegram这个名字
  3. 不要使用telegram的icon
  4. 请确保学习了他们的security guidelines并且注意用户隐私
  5. 代码应当开源以符合开源协议

所有的一切,当然是从拉去github上的代码开始,但注意,你不能单纯的使用git clone,因为telegram本身还依赖了另一个git仓库,你需要使用 git clone --recursive git@github.com:DrKLO/Telegram.git 命令,把telegram以及它所依赖的子模块克隆到本地。这里有个注意事项,telegram最好放在根目录,比如d盘根目录,否则路径太长可能会导致fatal error: opus.h: No such file or directory,详情参见Run telegram application - build error

clone完成之后,把TMessagesProj下的build.gradle中的signingConfigs 和buildTypes全删了,因为我们缺少它打包所需要的东西,以及applicationIdSuffix “.beta”会在接下来我们在google service中配置的包名后面加上.beta,导致配置文件错误,所以干脆全删了。之后把sourceSets.foss 也删了,因为在buildTypes中已经把foss的配置删掉了。前期准备工作基本上大致是这样,之后再build,你会发现和之前一样,会提示你缺少google-service.json

googleservice.png
这是因为telegram使用了gcm,而它github上的项目中并没有把gcm的配置文件,也就是google-service.json给我们,所以需要我们自己申请。因为原有的gcm服务,现在已经被迁移到firebase上,所以你可以去https://firebase.google.com/申请你的google配置文件。大致流程如下,

登录firebase新建一个项目:

gcm.png

之后选择将firebase添加到android

fandroid.png

新建android项目的时候,这里我把包名设定为com.mytelegram.cn,之后继续往下走,点击下载google-service.json文件就行了

json.png

之后把下载下来的google-service.json放在TMssagesProj的根目录下,之后因为我们在申请firebase服务的时候填入的packagename是com.mytelegram.cn,所以在build.gradle中也同样需要把defaultConfig.applicationId改为com.mytelegram.cn,最后就是这样的:

gradle.png

到这里,编译可能就能通过了。为什么说是可能呢?因为jni编译的时候根据ndk版本不同,可能会报各种各样的错,也可能不会报错,假如你和我一样,使用17.0左后的ndk,那么你还需要改动jni目录下的application.mk文件中的APP_ABI,把APP_ABI的armeabi 删除,这是因为在17.0左右,armeabi 已经太老了,不支持了。假如你的jni编译还有其他的错误,建议多google一下,总会找到答案的:)。

编译通过之后,就只差最后一步了,你需要去https://my.telegram.org/申请你的apiid,申请apiid需要你先用手机号注册一下telegram,因为没什么难的,就不详细讲了。最后到达这个界面,途中箭头所示的两个字段就是我们要的。

appid.png

把apiid和api_hash填入org.telegram.messenger下的BuildVars.java文件中,同时底下还有HOCKEY_APP_HASH和HOCKEY_APP_HASH_DEBUG两个字段,这两个字段需要一个32位的字符串,我这里用了32个0,也通过了。

到这里,基本上就完成了所有要做的事,你接下来可以在自己的电脑上对telegram进行调试了,我这里改了一下telegram的名字,我把名字改成了我的博客名,icon改成了android初始icon,成功运行起来了自己的telegram


ygfil-35xe8.gif

那么最后做一下总结

1.clone项目,记得同时clone依赖的子模块
2.注册google 的firebase,拿到google-service.json
3.修改build.gradle
4.申请api_id并在配置文件里修改
5.排查jni编译时候的错误
6.通过编译并运行

自己编译的telegram和googleplay上下的没什么不同,一样能收到消息,但是注意不能使用语音电话功能。

Tips:当我开始阅读telegram的源码时,映入眼帘的就是一个三千多行的LoginActivityε=(´ο`*)))

相关文章

网友评论

  • 江雨寒:拉下来就报着 ndk路径为null
    Error while executing process D:\DevelopSoftToolsPath\Android\SDK\ndk-bundle\ndk-build.cmd with arguments {NDK_PROJECT_PATH=null APP_BUILD_SCRIPT=E:\MyDemos\Telegram-master\TMessagesProj\jni\Android.mk NDK_APPLICATION_MK=E:\MyDemos\Telegram-master\TMessagesProj\jni\Application.mk APP_ABI=x86 NDK_ALL_ABIS=x86 NDK_DEBUG=1 APP_PLATFORM=android-16 NDK_OUT=E:/MyDemos/Telegram-master/TMessagesProj/build/intermediates/ndkBuild/x86/debug/obj NDK_LIBS_OUT=E:\MyDemos\Telegram-master\TMessagesProj\build\intermediates\ndkBuild\x86\debug\lib NDK_APPLICATION_MK:=jni/Application.mk APP_PLATFORM:=android-16 -j8 APP_SHORT_COMMANDS=false LOCAL_SHORT_COMMANDS=false -B -n}

    请问遇到过吗?卡几天了!头疼
    Giorno_Giovanna:没有遇到过诶,你试试单独编译jni看看会报什么错
  • 迷惘搬运工:貌似注册不了,一直没给我发验证码
    Giorno_Giovanna:我之前是用的国外的电话号码注册的,因为人在国外,国内的应该是可以的。发送短信的时候,你注意一下国家区号。
  • 皮特天:厉害!学习自己搞了好久都没有编译成功,网上的文章也就是点到为止,感谢您的文章,让我也可以试试,最近在研究他们家的代码
    Giorno_Giovanna:@路路路lbj 一样的,都行
    秉心说:@Alen_Xiao 我都是直接拿so过来用,不编jni
    Giorno_Giovanna:我也搞了几个小时,主要是jni的问题

本文标题:在Android Studio上编译自己的Telegram

本文链接:https://www.haomeiwen.com/subject/zuirsftx.html