在启用proguard的情况下,UserTimeline回调不会返回

时间:2015-07-29 18:56:24

标签: android twitter twitter-fabric android-proguard

我使用TweetTimelineListAdapter中的Fabric来显示推文列表。这可以在禁用proguard的情况下正常工作,但是当我启用它时,我的UserTimeline对象会停止返回其回调中的任何成功或失败。

我的日志中没有错误或异常。单步执行代码会显示访客登录成功,并且发送了推文请求但未收到任何响应。

以下是我如何获取推文:

private void loadTweets() {
    TwitterCore.getInstance().logInGuest(new Callback<AppSession>() {
        @Override
        public void success(Result<AppSession> result) {
            // logging in is successful, this code executes
            UserTimeline userTimeline = new UserTimeline.Builder()
                    .screenName("@ScreenName")
                    .maxItemsPerRequest(100)
                    .includeReplies(false)
                    .includeRetweets(true)
                    .build();

            mAdapter = new TweetTimelineListAdapter(TwitterActivity.this, userTimeline);
            mAdapter.registerDataSetObserver(mDataSetObserver);
            ((ListView) findViewById(R.id.tweet_list)).setAdapter(mAdapter);
        }

        @Override
        public void failure(TwitterException e) {
            Log.e(TwitterActivity.class.getName(), "Error performing guest login to twitter", e);
        }
    });
}

private DataSetObserver mDataSetObserver = new DataSetObserver() {
    @Override
    public void onChanged() {
        super.onChanged();

        // display data or error here based on results
        // this code is never executed
    }
};

这是我在Fabric文档中推荐的proguard配置文件以及我的一些补充:

-dontwarn  com.digits.sdk.android.*ActionBarActivity

# retrofit specific
-dontwarn com.squareup.okhttp.**
-dontwarn com.google.appengine.api.urlfetch.**
-dontwarn rx.**
-dontwarn retrofit.**
-keepattributes Signature
-keepattributes *Annotation*
-keep class com.squareup.okhttp.** { *; }
-keep interface com.squareup.okhttp.** { *; }
-keep class retrofit.** { *; }
-keepclasseswithmembers class * {
    @retrofit.http.* <methods>;
}

# GSON
-keep class com.google.gson.** { *; }
-keep interface com.google.gson.** { *; }
-dontwarn com.google.gson.**

1 个答案:

答案 0 :(得分:0)

除了您的Proguard设置外,您还需要添加

-keepnames class * implements android.os.Parcelable {
       public static final ** CREATOR;
}

AND(非常重要)

{{1}}

我必须学习使用尽可能多的proguard分隔符更安全的方法,以便在缩小自定义库或sdks时不会遇到问题。

有关proguard所需的所有分隔符的更多信息,请访问http://omgitsmgp.com/2013/09/09/a-conservative-guide-to-proguard-for-android/

AND可能http://blog.androidquery.com/2011/06/android-optimization-with-proper.html