Этап 0 п.1: release собираем и подписан (signingConfig из env + R8-правила)
- signingConfig.release читает F7_KEYSTORE_FILE/PASSWORD, F7_KEY_ALIAS/PASSWORD из env или -P; фолбэк на debug-подпись если не заданы. Схемы v2+v3. - R8: app/proguard-rules.pro (kotlinx.serialization, Firebase, JS-мосты, Coil); vendor consumer-rules.pro через consumerProguardFiles (WebRTC/LoganSquare/Dagger/ RxJava/Parceler/EventBus + dontwarn geogson/joda из missing_rules.txt). - Проверено на инфре B (JDK 21 + Android SDK 36): assembleRelease BUILD SUCCESSFUL, подписанный APK 99 МБ (было ~130 debug), apksigner verify v2+v3 OK. - Доки: docs/RELEASE-SIGNING.md, docs/AUDIT-2026-07-07.md.
This commit is contained in:
Vendored
+5
@@ -34,6 +34,11 @@ android {
|
||||
targetSdkVersion 36
|
||||
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
||||
|
||||
// F7cloud: keep-правила зависимостей vendor (WebRTC/LoganSquare/Dagger/RxJava/
|
||||
// Parceler/EventBus) для R8 приложения-потребителя (:app). Vendor — library без
|
||||
// минификации, поэтому только через consumerProguardFiles правила доедут до :app.
|
||||
consumerProguardFiles 'consumer-rules.pro'
|
||||
|
||||
// mayor.minor.hotfix.increment (for increment: 01-50=Alpha / 51-89=RC / 90-99=stable)
|
||||
// xx .xxx .xx .xx
|
||||
versionCode 230000090
|
||||
|
||||
+83
@@ -0,0 +1,83 @@
|
||||
# Consumer ProGuard/R8 rules для :vendor:talk-app (F7cloud).
|
||||
# Эти правила ПРОПАГИРУЮТСЯ в R8 приложения :app (vendor собирается как library
|
||||
# с minifyEnabled false, поэтому обычные proguardFiles на потребителя не влияют —
|
||||
# нужен именно consumerProguardFiles, см. app/build.gradle).
|
||||
# Защищают зависимости vendor-форка Nextcloud Talk от переименования/удаления R8.
|
||||
|
||||
# --- WebRTC (JNI: нативный libjingle_peerconnection_so.so зовёт org.webrtc.* по имени) ---
|
||||
-keep class org.webrtc.** { *; }
|
||||
-dontwarn org.webrtc.**
|
||||
|
||||
# --- LoganSquare (converter Talk API: сгенерированные $$JsonObjectMapper через рефлексию) ---
|
||||
-keep class com.bluelinelabs.logansquare.** { *; }
|
||||
-keep @com.bluelinelabs.logansquare.annotation.JsonObject class * { *; }
|
||||
-keep class **$$JsonObjectMapper { *; }
|
||||
-keepnames class * extends com.bluelinelabs.logansquare.JsonMapper
|
||||
-keepclassmembers class * {
|
||||
@com.bluelinelabs.logansquare.annotation.JsonField *;
|
||||
}
|
||||
|
||||
# --- Jackson core (используется LoganSquare) ---
|
||||
-dontwarn com.fasterxml.jackson.**
|
||||
-keep class com.fasterxml.jackson.** { *; }
|
||||
|
||||
# --- Модели Talk API (парсятся LoganSquare/Gson по именам полей) ---
|
||||
-keep class ru.f7cloud.talk.models.** { *; }
|
||||
|
||||
# --- Gson (converter-gson + модели) ---
|
||||
-keepattributes Signature,*Annotation*,EnclosingMethod,InnerClasses
|
||||
-keep class com.google.gson.** { *; }
|
||||
-dontwarn com.google.gson.**
|
||||
-keepclassmembers,allowobfuscation class * {
|
||||
@com.google.gson.annotations.SerializedName <fields>;
|
||||
}
|
||||
|
||||
# --- Retrofit 2 ---
|
||||
-keep,allowobfuscation,allowshrinking interface retrofit2.Call
|
||||
-keep,allowobfuscation,allowshrinking class retrofit2.Response
|
||||
-keepclasseswithmembers class * { @retrofit2.http.* <methods>; }
|
||||
-dontwarn retrofit2.**
|
||||
-dontwarn okio.**
|
||||
-keepattributes RuntimeVisibleAnnotations,RuntimeVisibleParameterAnnotations
|
||||
|
||||
# --- Parceler (сгенерированные $$Parcelable) ---
|
||||
-keep class **$$Parcelable { *; }
|
||||
-keep interface org.parceler.Parcel
|
||||
-keep @org.parceler.Parcel class * { *; }
|
||||
-keepclassmembers class **$$Parcelable {
|
||||
public static final ** CREATOR;
|
||||
}
|
||||
|
||||
# --- EventBus (@Subscribe вызывается рефлексией) ---
|
||||
-keepattributes *Annotation*
|
||||
-keepclassmembers class * {
|
||||
@org.greenrobot.eventbus.Subscribe <methods>;
|
||||
}
|
||||
-keep enum org.greenrobot.eventbus.ThreadMode { *; }
|
||||
-keep class org.greenrobot.eventbus.android.** { *; }
|
||||
|
||||
# --- Dagger / autodagger2 ---
|
||||
-dontwarn dagger.**
|
||||
-dontwarn com.github.lukaspili.autodagger2.**
|
||||
|
||||
# --- RxJava2 (опциональные зависимости на этапе компиляции) ---
|
||||
-dontwarn java.util.concurrent.Flow*
|
||||
-dontwarn sun.misc.**
|
||||
-dontwarn org.reactivestreams.**
|
||||
|
||||
# --- Conscrypt (опциональный security-provider) ---
|
||||
-dontwarn org.conscrypt.**
|
||||
-keep class org.conscrypt.** { *; }
|
||||
|
||||
# --- прочие опциональные/аннотационные зависимости, на которые ругается R8 ---
|
||||
-dontwarn javax.annotation.**
|
||||
-dontwarn org.bouncycastle.**
|
||||
-dontwarn org.slf4j.**
|
||||
-dontwarn okhttp3.internal.platform.**
|
||||
|
||||
# --- недостающие опциональные refs (из missing_rules.txt R8): geogson→старая guava,
|
||||
# joda-convert аннотации joda-time (maps-стек Talk). Классы отсутствуют в рантайме,
|
||||
# код их не вызывает — безопасно подавить. ---
|
||||
-dontwarn com.google.common.base.Objects$ToStringHelper
|
||||
-dontwarn org.joda.convert.FromString
|
||||
-dontwarn org.joda.convert.ToString
|
||||
Reference in New Issue
Block a user