Add compatibility bridge classes (Plugin, PluginsController, CustomSetting) so community plugins importing exteraGram APIs resolve and run in ZaStoGram. Enhance Python plugin hooks to support MODIFY strategy at both container and per-update levels with proper write-back of modifications. Fix version parsing in safeInt() to skip leading version markers (e.g. '>=', 'v') before extracting digits.
139 lines
No EOL
6.9 KiB
Prolog
139 lines
No EOL
6.9 KiB
Prolog
-keep public class com.google.android.gms.* { public *; }
|
|
-keepnames @com.google.android.gms.common.annotation.KeepName class *
|
|
-keepclassmembernames class * {
|
|
@com.google.android.gms.common.annotation.KeepName *;
|
|
}
|
|
-keep class org.webrtc.* { *; }
|
|
-keep class org.webrtc.audio.* { *; }
|
|
-keep class org.webrtc.voiceengine.* { *; }
|
|
-keep class org.telegram.messenger.* { *; }
|
|
-keep class org.telegram.messenger.camera.* { *; }
|
|
-keep class org.telegram.messenger.secretmedia.* { *; }
|
|
-keep class org.telegram.messenger.support.* { *; }
|
|
-keep class org.telegram.messenger.support.* { *; }
|
|
-keep class org.telegram.messenger.time.* { *; }
|
|
-keep class org.telegram.messenger.video.* { *; }
|
|
-keep class org.telegram.messenger.voip.* { *; }
|
|
-keep class org.telegram.SQLite.** { *; }
|
|
-keep class org.telegram.tgnet.ConnectionsManager { *; }
|
|
-keep class org.telegram.tgnet.NativeByteBuffer { *; }
|
|
-keep class org.telegram.tgnet.RequestTimeDelegate { *; }
|
|
-keep class org.telegram.tgnet.RequestDelegate { *; }
|
|
|
|
# ===== ZaStoGram plugin engine =====
|
|
# Plugins import Telegram classes by full name and reflect on members by name
|
|
# (get_private_field / getDeclaredMethod / hooks). The project already sets -dontobfuscate,
|
|
# so names are preserved; the real risk is R8 *removing* members that only a plugin
|
|
# references reflectively (R8 fullMode tree-shakes per-member). -keep is a shrink root and
|
|
# prevents that across the whole Telegram surface. Cost: larger DEX — the trade-off for an
|
|
# open plugin engine.
|
|
-keep class org.telegram.** { *; }
|
|
# Engine bridge classes are called from Python by name — keep fully.
|
|
-keep class org.telegram.plugins.** { *; }
|
|
# exteraGram-compatibility bridge classes imported by community plugins (com.exteragram.messenger.*).
|
|
-keep class com.exteragram.messenger.plugins.** { *; }
|
|
# Embedded Python runtime (Chaquopy) and the Pine / Xposed hooking engine use JNI + reflection.
|
|
-keep class com.chaquo.python.** { *; }
|
|
-keep class top.canyie.pine.** { *; }
|
|
-keep class de.robv.android.xposed.** { *; }
|
|
-keep class com.android.internal.util.** { *; }
|
|
-dontwarn com.chaquo.python.**
|
|
-dontwarn top.canyie.pine.**
|
|
-dontwarn de.robv.android.xposed.**
|
|
# ===== end ZaStoGram plugin engine =====
|
|
|
|
-keep class com.google.android.exoplayer2.ext.** { *; }
|
|
-keep class com.google.android.exoplayer2.extractor.FlacStreamMetadata { *; }
|
|
-keep class com.google.android.exoplayer2.metadata.flac.PictureFrame { *; }
|
|
-keep class com.google.android.exoplayer2.decoder.SimpleDecoderOutputBuffer { *; }
|
|
-keep class org.telegram.ui.Stories.recorder.FfmpegAudioWaveformLoader { *; }
|
|
-keep class androidx.mediarouter.app.MediaRouteButton { *; }
|
|
-keepclassmembers class ** {
|
|
@android.webkit.JavascriptInterface <methods>;
|
|
}
|
|
|
|
# https://developers.google.com/ml-kit/known-issues#android_issues
|
|
-keep class com.google.mlkit.nl.languageid.internal.LanguageIdentificationJni { *; }
|
|
|
|
# Constant folding for resource integers may mean that a resource passed to this method appears to be unused. Keep the method to prevent this from happening.
|
|
-keep class com.google.android.exoplayer2.upstream.RawResourceDataSource {
|
|
public static android.net.Uri buildRawResourceUri(int);
|
|
}
|
|
|
|
# Methods accessed via reflection in DefaultExtractorsFactory
|
|
-dontnote com.google.android.exoplayer2.ext.flac.FlacLibrary
|
|
-keepclassmembers class com.google.android.exoplayer2.ext.flac.FlacLibrary {
|
|
|
|
}
|
|
|
|
# Some members of this class are being accessed from native methods. Keep them unobfuscated.
|
|
-keep class com.google.android.exoplayer2.decoder.VideoDecoderOutputBuffer {
|
|
*;
|
|
}
|
|
|
|
-dontnote com.google.android.exoplayer2.ext.opus.LibopusAudioRenderer
|
|
-keepclassmembers class com.google.android.exoplayer2.ext.opus.LibopusAudioRenderer {
|
|
<init>(android.os.Handler, com.google.android.exoplayer2.audio.AudioRendererEventListener, com.google.android.exoplayer2.audio.AudioProcessor[]);
|
|
}
|
|
-dontnote com.google.android.exoplayer2.ext.flac.LibflacAudioRenderer
|
|
-keepclassmembers class com.google.android.exoplayer2.ext.flac.LibflacAudioRenderer {
|
|
<init>(android.os.Handler, com.google.android.exoplayer2.audio.AudioRendererEventListener, com.google.android.exoplayer2.audio.AudioProcessor[]);
|
|
}
|
|
-dontnote com.google.android.exoplayer2.ext.ffmpeg.FfmpegAudioRenderer
|
|
-keepclassmembers class com.google.android.exoplayer2.ext.ffmpeg.FfmpegAudioRenderer {
|
|
<init>(android.os.Handler, com.google.android.exoplayer2.audio.AudioRendererEventListener, com.google.android.exoplayer2.audio.AudioProcessor[]);
|
|
}
|
|
|
|
# Constructors accessed via reflection in DefaultExtractorsFactory
|
|
-dontnote com.google.android.exoplayer2.ext.flac.FlacExtractor
|
|
-keepclassmembers class com.google.android.exoplayer2.ext.flac.FlacExtractor {
|
|
<init>();
|
|
}
|
|
|
|
# Constructors accessed via reflection in DefaultDownloaderFactory
|
|
-dontnote com.google.android.exoplayer2.source.dash.offline.DashDownloader
|
|
-keepclassmembers class com.google.android.exoplayer2.source.dash.offline.DashDownloader {
|
|
<init>(android.net.Uri, java.util.List, com.google.android.exoplayer2.offline.DownloaderConstructorHelper);
|
|
}
|
|
-dontnote com.google.android.exoplayer2.source.hls.offline.HlsDownloader
|
|
-keepclassmembers class com.google.android.exoplayer2.source.hls.offline.HlsDownloader {
|
|
<init>(android.net.Uri, java.util.List, com.google.android.exoplayer2.offline.DownloaderConstructorHelper);
|
|
}
|
|
-dontnote com.google.android.exoplayer2.source.smoothstreaming.offline.SsDownloader
|
|
-keepclassmembers class com.google.android.exoplayer2.source.smoothstreaming.offline.SsDownloader {
|
|
<init>(android.net.Uri, java.util.List, com.google.android.exoplayer2.offline.DownloaderConstructorHelper);
|
|
}
|
|
|
|
# Constructors accessed via reflection in DownloadHelper
|
|
-dontnote com.google.android.exoplayer2.source.dash.DashMediaSource$Factory
|
|
-keepclasseswithmembers class com.google.android.exoplayer2.source.dash.DashMediaSource$Factory {
|
|
<init>(com.google.android.exoplayer2.upstream.DataSource$Factory);
|
|
}
|
|
-dontnote com.google.android.exoplayer2.source.hls.HlsMediaSource$Factory
|
|
-keepclasseswithmembers class com.google.android.exoplayer2.source.hls.HlsMediaSource$Factory {
|
|
<init>(com.google.android.exoplayer2.upstream.DataSource$Factory);
|
|
}
|
|
-dontnote com.google.android.exoplayer2.source.smoothstreaming.SsMediaSource$Factory
|
|
-keepclasseswithmembers class com.google.android.exoplayer2.source.smoothstreaming.SsMediaSource$Factory {
|
|
<init>(com.google.android.exoplayer2.upstream.DataSource$Factory);
|
|
}
|
|
|
|
# Huawei Services
|
|
-keep class com.huawei.hianalytics.**{ *; }
|
|
-keep class com.huawei.updatesdk.**{ *; }
|
|
-keep class com.huawei.hms.**{ *; }
|
|
|
|
# Don't warn about checkerframework and Kotlin annotations
|
|
-dontwarn org.checkerframework.**
|
|
-dontwarn javax.annotation.**
|
|
|
|
-keep class io.nano.tex.** {*;}
|
|
|
|
# JLatexMath: macro/atom classes are loaded reflectively by Class.forName
|
|
-keep class org.scilab.forge.jlatexmath.** { *; }
|
|
-keep class ru.noties.jlatexmath.** { *; }
|
|
-dontwarn org.scilab.forge.jlatexmath.**
|
|
|
|
# Use -keep to explicitly keep any other classes shrinking would remove
|
|
-dontoptimize
|
|
-dontobfuscate |