Based on Nekogram. Key additions: - Rebrand to FoxiGram (app name, APK name, applicationId com.foxigram.app) - Embedded Xray (VLESS+Reality) proxy client via JNI libxray.so - Bundled hidden one-tap proxies (LTE + WiFi), read-only in UI - Auto-restore proxy on restart, rebind to active network (LTE/WiFi) - Server credentials externalized to git-ignored XrayServers.java (+ template) - libxray Go source included; compiled .so, keystore, google-services.json ignored
185 lines
8.4 KiB
Prolog
185 lines
8.4 KiB
Prolog
-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.tgnet.RequestTimeDelegate { *; }
|
|
-keep class org.telegram.tgnet.RequestDelegate { *; }
|
|
-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.**
|
|
|
|
|
|
# Used by AtomicReferenceFieldUpdater and sun.misc.Unsafe
|
|
-keepclassmembers class com.google.common.util.concurrent.AbstractFuture** {
|
|
*** waiters;
|
|
*** value;
|
|
*** listeners;
|
|
*** thread;
|
|
*** next;
|
|
}
|
|
|
|
# Since Unsafe is using the field offsets of these inner classes, we don't want
|
|
# to have class merging or similar tricks applied to these classes and their
|
|
# fields. It's safe to allow obfuscation, since the by-name references are
|
|
# already preserved in the -keep statement above.
|
|
-keep,allowshrinking,allowobfuscation class com.google.common.util.concurrent.AbstractFuture** {
|
|
<fields>;
|
|
}
|
|
|
|
-keepclasseswithmembers,allowobfuscation class * {
|
|
@com.google.gson.annotations.SerializedName <fields>;
|
|
}
|
|
|
|
# Gson uses generic type information stored in a class file when working with fields. Proguard
|
|
# removes such information by default, so configure it to keep all of it.
|
|
-keepattributes Signature,InnerClasses,EnclosingMethod
|
|
|
|
-keep class org.telegram.messenger.voip.* { *; }
|
|
-keep class org.telegram.messenger.AnimatedFileDrawableStream { <methods>; }
|
|
-keep class org.telegram.SQLite.SQLiteException { <methods>; }
|
|
-keep class org.telegram.tgnet.ConnectionsManager { <methods>; }
|
|
-keep class org.telegram.tgnet.NativeByteBuffer { <methods>; }
|
|
-keepnames class ** extends org.telegram.ui.ActionBar.BaseFragment
|
|
-keepclassmembernames,allowshrinking class org.telegram.ui.* { <fields>; }
|
|
-keepclassmembernames,allowshrinking class org.telegram.ui.Cells.* { <fields>; }
|
|
-keepclassmembernames,allowshrinking class org.telegram.ui.Components.* { <fields>; }
|
|
-keepclassmembernames,allowshrinking class tw.nekomimi.nekogram.MessageDetailsActivity$TextDetailSimpleCell { <fields>; }
|
|
-keepclassmembernames,allowshrinking class tw.nekomimi.nekogram.settings.AccountCell { <fields>; }
|
|
-keepclassmembernames,allowshrinking class tw.nekomimi.nekogram.settings.EmojiSetCell { <fields>; }
|
|
-keepclassmembernames,allowshrinking class tw.nekomimi.nekogram.settings.NekoChatSettingsActivity$StickerSizeCell { <fields>; }
|
|
|
|
-keepclassmembernames class androidx.core.widget.NestedScrollView {
|
|
private android.widget.OverScroller mScroller;
|
|
private void abortAnimatedScroll();
|
|
}
|
|
|
|
-keepclasseswithmembernames,includedescriptorclasses class * {
|
|
native <methods>;
|
|
}
|
|
|
|
-assumenosideeffects class kotlin.jvm.internal.Intrinsics {
|
|
public static void check*(...);
|
|
public static void throw*(...);
|
|
}
|
|
|
|
-keepclassmembers enum * {
|
|
public static **[] values();
|
|
public static ** valueOf(java.lang.String);
|
|
}
|
|
|
|
-keepnames class androidx.recyclerview.widget.RecyclerView
|
|
-keepclassmembers class androidx.recyclerview.widget.RecyclerView {
|
|
public void suppressLayout(boolean);
|
|
public boolean isLayoutSuppressed();
|
|
}
|
|
|
|
# -repackageclasses removed: breaks JNI symbol lookup when classes with native methods get renamed
|
|
# -allowaccessmodification removed: unsafe with JNI
|
|
-keepattributes SourceFile,LineNumberTable
|
|
-renamesourcefileattribute SourceFile
|
|
-dontoptimize
|
|
|
|
# Keep all classes that have native methods (JNI safety)
|
|
-keepclasseswithmembernames,includedescriptorclasses class * {
|
|
native <methods>;
|
|
}
|
|
|
|
# Keep @Keep annotated classes and members
|
|
-keep @androidx.annotation.Keep class * { *; }
|
|
-keepclassmembers class * {
|
|
@androidx.annotation.Keep *;
|
|
}
|
|
|
|
-dontwarn android.support.annotation.*
|
|
-dontwarn androidx.compose.**
|