RemoteMonster Community

리모트 몬스터 프로가드 질문

안녕하세요
리모트 몬스터로 1:1화상채팅 빌드중인데요
///////////////////////////////////////
잘 될때의 프로가드 설정은 디버그용 없이 아래와 같았습니다
예외설정은 따로 없었습니다.

 release {

        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'

    }

///////////////////////////////////

그래서 테스트를 위해 홈페이지 상에 나와있는 프로가드 설정을 아래처럼 추가하였습니다.

buildTypes {
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’
}
release {
minifyEnabled false
proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’
}
}

예외설정도 홈페이지에 나와있는 아래 문장들 추가했습니다.

-keepattributes SourceFile,LineNumberTable, InnerClasses, Exceptions, Signature, EnclosingMethod

-keepattributes Annotation

-dontoptimize

-dontwarn org.**

-dontwarn retrofit2.**

-keep class com.remotemonster.sdk.* { *;}

-keep class com.remotemonster.sdk.data.** { *;}

-keep class com.remotemonster.sdk.util.Logger{ *;}

-keep class com.remotemonster.sdk.data.Channel{ *;}

-keep class com.remotemonster.sdk.data.InitMessage{ *;}

-keep enum com.remotemonster.sdk.data.ChannelStatus{ *;}

-keep enum com.remotemonster.sdk.data.ChannelType{ *;}

-keep class org.** { *;}

-keep interface org.** { *;}

-keepclasseswithmembers class * {@retrofit2.http.* ;}

-keep class retrofit2.** { *; }

위에처럼 설정하니까 vm이나 테스트기에서 잘되다가 안되는 현상이 있었습니다
java.lang.NoClassDefFoundError: g.b.b.k 이런 멘트가 뜨는 현상이 좀 많이 있었고
다른 멘트 도 종종 떳었습니다.

///////////////////////////////////////////////
나중에 true로 출시한다는 가정하에 리모트 몬스터 없을 때 아래와 같이 설정했었을 때는 잘 되었지만 리모트 몬스터 추가 빌드 후에는 앱 실행자체가 안되었습니다. (물론 프로가드 파일 예외설정에 추가했습니다)

  debug {
        minifyEnabled true

        proguardFiles getDefaultProguardFile('proguard-android.txt')
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        proguardFile 'proguard-rules.pro'
        proguardFile 'proguard-debug.pro'
        consumerProguardFiles 'proguard-project.txt'

    }


    release {

        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        consumerProguardFiles 'proguard-project.txt'
    }

예외설정

-keep class com.google.firebase.provider.FirebaseInitProvider

-keepclassmembers class com.myappapp.myapplication.** { *; }

-dontwarn android.support.**

-keepclasseswithmembernames class * { native ; }

-keep class com.android.vending.billing.IInAppBillingService$Stub
-keep class * implements com.android.vending.billing.IInAppBillingService { ; }
-keep class com.android.vending.billing.
* { ; }
-keep class com.android.vending.billing.
*

-keep class com.myappapp.myapplication.itemdecorator
-keep public class * extends android.support.v7.widget.RecyclerView.ItemDecoration
-keep class android.support.v7.widget.RecyclerView

-keep public class * implements com.bumptech.glide.module.GlideModule
-keep class * extends com.bumptech.glide.module.AppGlideModule {
(…);
}
-keep public enum com.bumptech.glide.load.ImageHeaderParser$** {
**[] $VALUES;
public *;
}
-keep class com.bumptech.glide.load.data.ParcelFileDescriptorRewinder$InternalRewinder {
*** rewind();
}

-keepattributes SourceFile,LineNumberTable, InnerClasses, Exceptions, Signature, EnclosingMethod
-keepattributes Annotation
-dontoptimize
-dontwarn org.**
-dontwarn retrofit2.**

-keep class com.remotemonster.sdk.* { ;}
-keep class com.remotemonster.sdk.data.
* { *;}
-keep class com.remotemonster.sdk.util.Logger{ *;}
-keep class com.remotemonster.sdk.data.Channel{ *;}
-keep class com.remotemonster.sdk.data.InitMessage{ ;}
-keep enum com.remotemonster.sdk.data.ChannelStatus{ ;}
-keep enum com.remotemonster.sdk.data.ChannelType{ ;}
-keep class org.
{ ;}
-keep interface org.
{ *;}

-keepclasseswithmembers class * {@retrofit2.http.* ;}
-keep class retrofit2.** { *; }
////////////////////////////////////////

그럼 확인 후 프로가드를 구체적으로 어떻게 설정하면 되는지 확인 부탁드립니다.

1 Like

오늘 중 답변드리겠습니다.

혹시 사용 계약 등 기타적인 문제와 관련이 있다면
저희는 이미 리모트 몬스터 의 솔루션을 사용하기로 결정했다는 부분을 미리 말씀드립니다.
테스트 후에 큰 문제만 없다면 사용 계약 신청하려 합니다
그럼 잘 부탁드립니다.

안녕하세요
어제 답변주신다고 해서 기다리고 있었는데 아직 아무 말씀이 없으셔서 다시 댓글 남겨드립니다
혹시 다른 업무 때문에 바쁘신 거면 언제쯤 답변 주실 수 있는지 대략적인 시점 한번 부탁드립니다

감사합니다

builld.gradle

defaultConfig {
    ...
    consumerProguardFiles 'consumer-rules.pro'
}

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    }

    debug {
        minifyEnabled false
        shrinkResources false
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    }
}

consumer-rules.pro

-keep class com.remotemonster.sdk.* { ;}
-keep class com.remotemonster.sdk.data.
* { *;}
-keep class com.remotemonster.sdk.util.Logger{ *;}
-keep enum com.remotemonster.sdk.data.ChannelStatus { *;}
-keep enum com.remotemonster.sdk.data.ChannelType { *;}

# webrtc
-keep class org.webrtc.** { ; }
-keep interface org.webrtc.
* { *; }

# netty 4.0
-dontwarn io.netty.**
-keep class io.netty.** { ;}
-keep interface io.netty.
* { *;}

# Slf4j for android
-keep class org.slf4j.** { ;}
-keep interface org.slf4j.
* { *; }

# Jzlib
-keep class com.jcraft.jzlib.** { ; }
-keep interface com.jcraft.jzlib.
* { *; }

proguard-rules.pro
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
#   public *;
#}

# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable

# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile

# Add this global rule

안녕하세요

신경써주셔서 정말로 감사드립니다.
///////////////////////
*현재 웹뷰 관련은 저희쪽 실수로 발생한 문제 였습니다
대단히 죄송합니다. 그리하여 해당 부분은 삭제 하였습니다
그럼 minifyEnabled true일때 설정 만 봐주시면 될 거같습니다.
////////////////////////////

minifyEnabled 상태를 true로 하면 앱 자체 빌드는 여전히 안되었습니다.
이부분 확인 부탁드립니다.

그리고 마지막으로 올려주신 것처럼 consumer-rules.pro 로 나누어서 작성 후 빌드하면 false로 해도 앱자체 실행이 안되어 그냥 proguard-rules.pro 파일안에 예외설정 다 합쳐서 올리면 false 상태에서는 잘 작동 되었습니다.

minifyEnabled 상태 true 일때 확인 부탁드립니다.