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 크기를 더 줄이는 것이 더 나을 것입니다.
-keep class com.mypackage.data.** {*;}
그것은 내 문제를 해결합니다.
보호 규칙 파일에 추가합니다.
-optimizations !class/merging/*
언급URL : https://stackoverflow.com/questions/26273929/what-proguard-configuration-do-i-need-for-firebase-on-android
'programing' 카테고리의 다른 글
Oracle SQL: 인라인 뷰에 있을 때 SYS_GUID()의 동작을 이해하시겠습니까? (0) | 2023.07.06 |
---|---|
'_body' 속성이 'Response' 유형에 없습니다. (0) | 2023.07.06 |
WordPress 오류:웹 사이트에 심각한 오류가 발생했습니다.지침은 사이트 관리자 전자 메일 받은 편지함을 확인하십시오. (0) | 2023.07.06 |
React useStatehooks 오류: 'xxx' 유형의 인수를 'SetStateAction' 유형의 매개 변수에 할당할 수 없습니다. (0) | 2023.07.06 |
WebApi 호출을 통해 페이지에서 Excel 파일 다운로드 (0) | 2023.07.06 |