>

Android 용 ProGuard/릴리스 빌드에서 실제로 사용했습니다. 앱을 Play 스토어에 업로드하려고했지만 무언가를 고칠 때마다 다른 오류가 표시됩니다. 그리고 이것은 릴리스 모드에서만 발생합니다. 많은 시행 착오를 거친 후 내 앱이 Play 스토어에 있습니다. 이전에는 시작시 충돌이 발생했습니다 (ProGuard 설정에서 클래스를 추가하여 수정). 그런 다음 Facebook은 로그인하지 않았습니다 (

-keep class com.facebook.** {
   *;
}

ProGuard 설정.

이제 Facebook의 Open Graph에 연결하고 메시지를 게시하려고하면 앱이 다운됩니다. 이 오류가 발생하고 웹에서 실제로 오류를 찾을 수 없습니다 :

04-02 18:09:20.160: E/AndroidRuntime(16163): FATAL EXCEPTION: main
04-02 18:09:20.160: E/AndroidRuntime(16163): com.facebook.FacebookGraphObjectException: Factory can't proxy method: public abstract java.lang.String com.xxxx.views.am.a()
04-02 18:09:20.160: E/AndroidRuntime(16163):    at com.facebook.model.GraphObject$Factory.verifyCanProxyClass(SourceFile:270)
04-02 18:09:20.160: E/AndroidRuntime(16163):    at com.facebook.model.GraphObject$Factory.createGraphObjectProxy(SourceFile:196)
04-02 18:09:20.160: E/AndroidRuntime(16163):    at com.facebook.model.GraphObject$Factory.access$0(SourceFile:195)
04-02 18:09:20.160: E/AndroidRuntime(16163):    at com.facebook.model.GraphObject$Factory$GraphObjectProxy.proxyGraphObjectMethods(SourceFile:530)
04-02 18:09:20.160: E/AndroidRuntime(16163):    at com.facebook.model.GraphObject$Factory$GraphObjectProxy.invoke(SourceFile:470)
04-02 18:09:20.160: E/AndroidRuntime(16163):    at $Proxy3.cast(Native Method)
04-02 18:09:20.160: E/AndroidRuntime(16163):    at com.facebook.Response.getGraphObjectAs(SourceFile:124)
04-02 18:09:20.160: E/AndroidRuntime(16163):    at com.xxxxx.views.aa.a(SourceFile:432)
04-02 18:09:20.160: E/AndroidRuntime(16163):    at com.xxxxxx.views.aa.a(SourceFile:419)
04-02 18:09:20.160: E/AndroidRuntime(16163):    at com.xxxxx.views.ag.a(SourceFile:377)
04-02 18:09:20.160: E/AndroidRuntime(16163):    at com.xxxxx.views.ag.onPostExecute(SourceFile:1)
04-02 18:09:20.160: E/AndroidRuntime(16163):    at android.os.AsyncTask.finish(AsyncTask.java:631)
04-02 18:09:20.160: E/AndroidRuntime(16163):    at android.os.AsyncTask.access$600(AsyncTask.java:177)
04-02 18:09:20.160: E/AndroidRuntime(16163):    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
04-02 18:09:20.160: E/AndroidRuntime(16163):    at android.os.Handler.dispatchMessage(Handler.java:99)
04-02 18:09:20.160: E/AndroidRuntime(16163):    at android.os.Looper.loop(Looper.java:137)
04-02 18:09:20.160: E/AndroidRuntime(16163):    at android.app.ActivityThread.main(ActivityThread.java:4931)
04-02 18:09:20.160: E/AndroidRuntime(16163):    at java.lang.reflect.Method.invokeNative(Native Method)
04-02 18:09:20.160: E/AndroidRuntime(16163):    at java.lang.reflect.Method.invoke(Method.java:511)
04-02 18:09:20.160: E/AndroidRuntime(16163):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
04-02 18:09:20.160: E/AndroidRuntime(16163):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:558)
04-02 18:09:20.160: E/AndroidRuntime(16163):    at dalvik.system.NativeStart.main(Native Method)

ProGuard가 여전히 사용중인 코드를 제거합니까? 그리고 어떤 설정이 문제를 해결합니까? 기록을 위해. 모든 것이 빌드 모드에서 훌륭하게 작동합니다.

또 다른 질문입니다. ProGuard 만 비활성화 할 수 있습니까? 정말 쓸모없고 더 많은 문제를 겪는다고 생각합니다.

  • 답변 # 1

    ProGuard는 기본적으로 릴리스 빌드에서도 비활성화되어 있습니다. proguard.config 를 활성화하여 직접 활성화했습니다.  당신의 project.properties 에 선  파일. 라인을 주석 처리하여 다시 비활성화 할 수 있습니다.

    ProGuard는 유용 할 수 있지만 응용 프로그램에 반영되도록 구성해야합니다. 이 경우 Facebook API는 자신의 수업을 반영합니다. API 코드를 살펴보면 GraphObject 확장에서 getter, setter 및 주석이 달린 메소드를 검색합니다. ProGuard는 반사에 대해 알지 못하며 일반적으로 알 수 없기 때문에 기본적으로 이름을 바꾸거나 제거합니다. API를 사용하는 다른 사람들은 어떤 클래스, 필드 및 메소드를 보존해야하는지 알 수 있습니다. API에 전달하고 메소드 명명 규칙이있는 클래스는 아마도 좋은 후보 일 것입니다.

  • 답변 # 2

    이 문제는 시간이 많이 걸립니다. 해결책은 현재 proguard 코드 외에 OpenGraphObject를 빌드하는 클래스를 제외하는 것입니다. 따라서 ProGuard를 끄는 대신 사용할 수 있습니다.

  • 답변 # 3

    -keep public class com.facebook.ads.** {
     public *;
    }
     -keep class com.google.ads.mediation.facebook.FacebookAdapter {
     *;
       }
    
    

    -dontwarn com.facebook.ads.internal. **    -dontwarn com.facebook.ads. **

  • 이전 reactjs - 반응 할 때 componentDidMount 및 componentWillUnmount를 수행하십시오
  • 다음 Vagrant와 Docker 간의 Redis 연결이 거부되었습니다