Telegram之导入项目、初步认识

萝らか妹 提交于 2020-01-27 03:49:32

1、下载源码、导入Android studio中调试并运行成功

从在github 上找到源码,到调试成功,Telegram能够被安装到手机上运行,前前后后花了起码四五天!调试过程中遇到了很多问题,特此记录!

正确步骤:

  • 通过github克隆源码。地址:Telegram 源码。按照网址上要求下载Android studio 3.4及以上版本、NDK20、SDK8.1,避免出错误。下图是克隆过程,当然也可以通过git 命令行进行操作。


    遇到的问题:克隆失败,多克隆几次,用了git 的图形界面版,最终成功。 可能是网络问题。也可以不用git 克隆直接下载压缩包,使用Android studio 打开文件夹。
  • 生成release.keystore 放置在项目目录下(Telegram\TMessagesProj\config)。这是因为从github 上克隆时,会少克一些配置文件,所以要自己生成。对于如何生成release.keystore文件,可以看这个。key store path可以直接选择上面的路径。名称写为release.keystore。(key store password、alias、key password记好,等下要填写到gradle.properties中)

    注:生成的keystore 文件后缀名为.jks ,需要重命名为release.keystore。调试过程中,如果出现含有release.keystore 关键字的错误,一般都是这步哪里出了问题。尝试查看目录下是否存在该文件,或者重新生成,以及检查gradle.properties 中参数是否正确。
  • 在gradle.properties 中填写RELEASE_KEY_PASSWORD,RELEASE_KEY_ALIAS和RELEASE_STORE_PASSWORD,以访问自己的release.keystore。
  • 点击这里,创建两个具有应用程序,org.telegram.messenger和org.telegram.messenger.beta的android应用,并下载org.telegram.messenger的google-services.json,复制到TMessagesProj的子目录中。

    遇到问题:运行报错,缺少org.telegram.messenger.beta 包,尝试将build.gradle中出现的 applicationIdSuffix “.beta” 这句代码注释掉。
  • 在TMessagesProj / java / org / telegram / messenger / BuildVars.java中填写值-每个变量都有一个链接,显示从何处以及从何处获取数据。APP_ID、APP_HASH通过下图方法注册获得,下面四个参数可以和我一样,其中HOCKEY_APP_HASH和HOCKEY_APP_HASH_DEBUG只要是32位即可。


    遇到的问题,好几个网页打不开,这些网站有些需要翻墙才能访问,这个自行解决。
  • 此时,必备步骤已经完工,开始编译、运行。这个过程可能会遇到各种问题,需要根据实际情况理智分析,上网查阅解决办法。下面粘出我的Gradle 配置,SDK、NDK版本,以及整个导入过程中对项目调试运行有帮助的一些链接。



    Telegram错误总结
    在Android Studio上编译自己的Telegram
    telegrm电报常见问题
    Gradle build 报错:Received status code 400 from server: Bad Request
    Error:SSL peer shut down incorrectly(完美解决)
    No matching client found for package name (Google Analytics) - multiple productFlavors & buildTypes [closed]

注:运行成功后,可以连接自己的手机运行、安装(虚拟机比较卡,我电脑完全带不动),手机需要打开开发者模式和Debug模式。

2、Telegram项目目录结构

Telegram 和一般的android 项目不同的是,它的前端ui 部分并不是用xml 布局文件写的,而是用纯java 写的!所以你会发现layout中基本找不到.xml 文件。

目前,代码看了一部分,由于之前基本没学过android,看起来比较吃力。有些类大概知道是干嘛的。特此记录!

messenger目录下:
ApplicationLoader.java --> 用来加载配置信息,初始化App,监测网络变化等。
SendMessagesHelper --> 发送各类消息的类

ui目录下:
ChatActivityEnterView.java --> 这个类是聊天窗口中发送消息界面部分。里面有发送消失按钮的监听事件、以及相关界面的绘制等。
CacheControlActivity.java --> 清理缓存Activity
ChangeNameActivity.java --> 编辑名称条目Activity
ChatActivity.java --> 聊天窗口,有按钮监听事件、顶部导航条目界面及监听事件等。
DateSettingsActivity.java --> 数据存储设置
LoginActivity.java --> 登录界面,选择国家,填写手机号
DialogActivity.java --> 登陆成功后,跳转的页面,对话界面,显示所有的对话信息。
LogoutActivity.java --> 登出界面
NotificatonsSettingsActivity.java --> 通知和声音Activity
PasscodeActivity.java --> 添加密码锁
PrivacySettingActivity.java --> 隐私、安全设置
ThemeActivity.jav --> 聊天主题类

3、知识点

  • 动态访问数据权限,放置在Fragment 的构造函数中,出现问题,导致此Fragment 无法打开。
  • 字节流、字符流区别:以stream结尾都是字节流,以reader和writer结尾都是字符流,两者的区别就是读写的时候一个是按字节读写,一个是按字符。在实际使用时差不多。在读写文件需要对内容按行处理,比如比较特定字符,处理某一行数据的时候一般会选择字符流。只是读写文件,和文件内容无关的,一般选择字节流。所有的文件在硬盘或在传输时都是以字节的方式进行的,包括图片等都是按字节的方式存储的,而字符是只有在内存中才会形成,所以在开发中,字节流使用较为广泛。Java的字节流:InputStream是所有字节输入流的祖先,而OutputStream是所有字节输出流的祖先。.Java的字符流:Reader是所有读取字符串输入流的祖先,而writer是所有输出字符串的祖先。InputStream,OutputStream,Reader,writer都是抽象类。所以不能直接new。
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!