我使用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.**
答案 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