programing

Android에서 Firebase를 사용하려면 어떤 ProGuard 구성이 필요합니까?

bestprogram 2023. 7. 6. 22:25

Android에서 Firebase를 사용하려면 어떤 ProGuard 구성이 필요합니까?

Android 앱용 Firebase SDK를 사용할 때 다음과 같은 경고와 오류가 계속 발생합니다(이클립스).

Warning ... can't find referenced class ...
Warning: there were ... unresolved references to classes or interfaces ...
You may need to specify additional library jars (using '-libraryjars') ...

안타깝게도 Firebase에는 ProGuard 사용에 대한 공식 문서가 없습니다.

ProGuard로 난독화되었을 때 파이어베이스로 릴리스를 성공적으로 컴파일하기 위해 앱에 필요한 지침은 무엇입니까?

제 개인적인 테스트에 따르면 Firebase 강화 안드로이드 앱이 ProGuard로 컴파일하려면 이러한 라인을 따라 무언가가 필요한 것으로 나타났습니다.

은 어든쨌, 당은추합니다를 해야 합니다.-keepnames class com.my.package.beans.** { *; }Firebase에서 사용자 지정 개체(예: 콩 또는 POJO)를 사용하는 경우.

Firebase SDK 1.0.18:

-keepnames class com.firebase.** { *; }
-keepnames class com.shaded.fasterxml.jackson.** { *; }
-keepnames class org.shaded.apache.** { *; }
-keepnames class javax.servlet.** { *; }
-dontwarn org.w3c.dom.**
-dontwarn org.joda.time.**
-dontwarn org.shaded.apache.commons.logging.impl.**

Firebase SDK 1.1.1:

-keep class com.firebase.** { *; }
-keep class org.shaded.apache.** { *; }
-keepnames class com.shaded.fasterxml.jackson.** { *; }
-keepnames class javax.servlet.** { *; }
-keepnames class org.ietf.jgss.** { *; }
-dontwarn org.w3c.dom.**
-dontwarn org.joda.time.**
-dontwarn org.shaded.apache.**
-dontwarn org.ietf.jgss.**

Firebase SDK 2.0.0:

-keep class com.firebase.** { *; }
-keep class org.apache.** { *; }
-keepnames class com.fasterxml.jackson.** { *; }
-keepnames class javax.servlet.** { *; }
-keepnames class org.ietf.jgss.** { *; }
-dontwarn org.w3c.dom.**
-dontwarn org.joda.time.**
-dontwarn org.shaded.apache.**
-dontwarn org.ietf.jgss.**

# Only necessary if you downloaded the SDK jar directly instead of from maven.
-keep class com.shaded.fasterxml.jackson.** { *; }

마지막 수단:

-keep class !com.my.package.** { *; }

주의:

어떤 공식적인 지침이라도 환영할 것입니다.-dontwarn지침은 분명히 위험합니다. 코드는 테스트하지 않은 지점에서 깨질 수 있습니다.게다가, 위의 규칙들은 상당히 관대하며 다른 규칙들은 당신의 APK를 더 잘 최적화할 수 있습니다.

Firebase 문서에서 다음을 발견했습니다.

ProGuard와 함께 앱에서 Firebase Realtime Database를 사용할 때는 난독화 후 모델 개체가 어떻게 직렬화되고 역직렬화되는지 고려해야 합니다.DataSnapshot.getValue(클래스) 또는 DatabaseReference를 사용하는 경우.setValue(Object)는 proguard-rules.pro 파일에 규칙을 추가해야 하는 데이터를 읽고 쓸 수 있도록 설정합니다.

# Add this global rule    
-keepattributes Signature

# This rule will properly ProGuard all the model classes in 
# the package com.yourcompany.models. Modify to fit the structure
# of your app.
-keepclassmembers class com.yourcompany.models.** {
*;
}

2021년 답변

사용하다@Keep데이터 클래스 앞에 주석을 추가하여 보호합니다.자바와 코틀린 모두를 위한 안드로이드X의 일부입니다.Firebase, Jetpack Navigator 및 Retfit에서 작동합니다.

@Keep
data class Listing(
    val id: String = "",
    val name: String = ""
)

설명서에 따르면:

빌드 시 코드를 최소화할 때 주석이 달린 요소를 제거하지 않아야 함을 나타냅니다.이것은 일반적으로 컴파일러가 코드를 사용하지 않는다고 생각할 수 있도록 리플렉션을 통해서만 액세스되는 메서드와 클래스에 사용됩니다.

공식 문서는 아니지만, Firebase는 Github 저장소 중 하나에서 몇 가지 기본 보호 규칙을 보여주었습니다.https://github.com/firebase/AndroidChat/blob/master/app/proguard-rules.pro

# Basic ProGuard rules for Firebase Android SDK 2.0.0+
-keep class com.firebase.** { *; }
-keep class org.apache.** { *; }
-keepnames class com.fasterxml.jackson.** { *; }
-keepnames class javax.servlet.** { *; }
-keepnames class org.ietf.jgss.** { *; }
-dontwarn org.apache.**
-dontwarn org.w3c.dom.**

다른 답변에 대한 후속 조치로 Firebase 2.4.1을 사용하여 프로가드 구성(YMMV)에 다음 사항만 포함하면 되었습니다.

-keep class com.firebase.** { *; }
-dontwarn com.fasterxml.**

Firebase 2.5.2의 구성이 변경된 것 같습니다.이것이 제게 도움이 되는 것입니다.

-keep class com.firebase.** { *; }
-keep class org.apache.** { *; }
-keepnames class com.shaded.fasterxml.** { *; }
-keepnames class com.fasterxml.jackson.** { *; }
-keepnames class javax.servlet.** { *; }
-keepnames class org.ietf.jgss.** { *; }
-dontwarn org.apache.**
-dontwarn org.w3c.dom.**

Firebase SDK 2.4.2에 대한 작업 세트:

-keep class com.firebase.** { *; }
-keepnames class com.fasterxml.jackson.** { *; }
-keepnames class javax.servlet.** { *; }
-keepnames class org.ietf.jgss.** { *; }
-dontwarn org.w3c.dom.**
-dontwarn org.joda.time.**
-dontwarn org.shaded.apache.**
-dontwarn org.ietf.jgss.**
-dontwarn com.firebase.**
-dontnote com.firebase.client.core.GaePlatform

저도 이것 때문에 고생했어요.사용자 4989692와 Ugo가 올바른 방향을 알려주셔서 감사합니다.

다음은 저에게 도움이 되었습니다.

빌드.그래들

    buildTypes {
    debug {
        minifyEnabled false
        shrinkResources false
        useProguard false
        debuggable true
        signingConfig signingConfigs.debug
    }
    release {
        minifyEnabled true
        shrinkResources true
        useProguard true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        signingConfig signingConfigs.release
    }
}

방호벽이 있는프로의

-dontwarn org.w3c.dom.**
-dontwarn org.joda.time.**
-dontwarn org.shaded.apache.**
-dontwarn org.ietf.jgss.**
-dontwarn com.firebase.**
-dontnote com.firebase.client.core.GaePlatform

-keepattributes Signature
-keepattributes *Annotation*
-keepattributes InnerClasses,EnclosingMethod

-keep class com.YOUR-APP-DOMAIN.** { *; }

# Basic ProGuard rules for Firebase Android SDK 2.0.0+
-keep class com.firebase.** { *; }

-keepnames class com.fasterxml.jackson.** { *; }
-keepnames class javax.servlet.** { *; }
-keepnames class org.ietf.jgss.** { *; }

Firebase Realtime Database를 사용하는 경우 모델 객체는 난독화 강세 텍스트 후 직렬화 및 역직렬화됩니다.

-keep class com.yourdevelopername.urappname.** { *; }

이러한 이유로 클린 아키텍처를 사용할 때 쉽게 수정할 수 있습니다. 이 시나리오를 보십시오. 앱에 여러 파일에서 여러 개의 Firebase 요청이 있을 경우 Firebase가 작동하기 위해 단일 클래스를 유지하는 것이 엉망이 될 것입니다.우리가 모듈화된 코드를 가지고 있고 우리의 모든 요청과 데이터 모델을 데이터 계층 안에 저장한다면 전체 프로젝트 대신 파이어베이스를 사용하는 클래스만 유지하는 것이 훨씬 쉬울 것입니다. 이렇게 하면 apk 크기를 더 줄이는 것이 더 나을 것입니다.

enter image description here

-keep class com.mypackage.data.** {*;}

그것은 내 문제를 해결합니다.

보호 규칙 파일에 추가합니다.

-optimizations !class/merging/*

언급URL : https://stackoverflow.com/questions/26273929/what-proguard-configuration-do-i-need-for-firebase-on-android