2013年10月31日 星期四

Proguard 設定

目前版本:ADT R22

設定方法:
1.打開project.properties, 把下面這行註解拿掉.
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
proguard-android.txt可以換成proguard-android-optimize.txt

2.在proguard-project.txt加入要設定的內容,範例如下
# for debug
#-renamesourcefileattribute SourceFile    
#-keepattributes SourceFile,LineNumberTable

-dontskipnonpubliclibraryclassmembers
-dontpreverify
#-dontshrink

-libraryjars ./libs/android-support-v4.jar
-libraryjars ./libs/gson-2.2.2.jar
-libraryjars ./libs/YouTubeAndroidPlayerApi.jar

-dontwarn org.apache.**
-dontwarn org.w3c.**
-dontwarn org.json.*
-dontwarn com.google.**
-dontwarn javax.**

-keep class javax.**  { *; }
-keep class org.**  { *; }
-keep class com.google.**  { *; }

# 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 *;
}

-keepclasseswithmembernames class * {
    native ;
}

##---------------Begin: proguard configuration for Gson  ----------
# Gson uses generic type information stored in a class file when working with fields. Proguard
# removes such information by default, so configure it to keep all of it.
-keepattributes Signature

# Gson specific classes
-keep class sun.misc.Unsafe { *; }
#-keep class com.google.gson.stream.** { *; }

# Application classes that will be serialized/deserialized over Gson
-keep class com.shaw.app.bean.** { *; }

##---------------End: proguard configuration for Gson  ----------


3.測試 & debug. 必須全部重測一遍, 確保所有功能都正常.

4.Release!

Reference:

2013年2月16日 星期六

開始使用Facebook SDK for Android 實機超簡短心得(Getting Started with the Facebook SDK for Android)

原文網址 https://developers.facebook.com/docs/getting-started/facebook-sdk-for-android/3.0/

步驟:
1. 下載Facebook SDK.
2. 在手機上安裝Facebook apk.
3. 將SDK中的facebook目錄(此為SDK), 及sample目錄(一堆範例) import到Eclipse中.
4. 開始試跑一下測試範例, 在網站上有分三種類的範例:

基本範例

  • ProfilePictureSample: 展示在不用login的情況下取得profile的圖片
  • FriendPickerSample: 展示native APP 的 friend picker功能來選取user的friend
  • PlacePickerSample: 展示在login的情況下取得profile的圖片

功能範例

  • SessionLoginSample: 展示如何使用SDK來進行login
  • JustRequestSample: demonstrates logged-in user making single and batched Facebook API requests (目錄中找不到)
  • BooleanOGSample: 展示如何發佈Open Graph custom action type
  • SwitchUserSample: 展示如何在多使用者中切換使用者

完整範例

  • HelloFacebookSample: 存取profile, 更新狀態, 照片上傳的完整範例
  • Scrumptious: FB android SDK tutorial範例的sample 
  • Hackbook: 展示如何使用Graph API 以及SDK版本的向下相容
如果要試跑需要login的sample app, 必須先註冊Facebook Developer帳號, 並在開發者帳號中的開發商設定->Sample app settings裡填入你的andorid debug key hash.
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64

密碼請輸入android
5.建立Facebook app, 並取得APP ID作為login用.
6.建立新project, 把package name和class name填回Facebook app的設定頁裡.
7.在AndroidManifest.xml中開啟internet permission, 並且填入下列的值.




8.MainActivity的測試程式碼:
package com.firstandroidapp;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.widget.TextView;
import com.facebook.*;
import com.facebook.model.*;

public class MainActivity extends Activity {

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // start Facebook Login
    Session.openActiveSession(this, true, new Session.StatusCallback() {

      // callback when session changes state
      @Override
      public void call(Session session, SessionState state, Exception exception) {
        if (session.isOpened()) {

          // make request to the /me API
          Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {

            // callback after Graph API response with user object
            @Override
            public void onCompleted(GraphUser user, Response response) {
              if (user != null) {
                TextView welcome = (TextView) findViewById(R.id.welcome);
                welcome.setText("Hello " + user.getName() + "!");
              }
            }
          });
        }
      }
    });
  }

  @Override
  public void onActivityResult(int requestCode, int resultCode, Intent data) {
      super.onActivityResult(requestCode, resultCode, data);
      Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
  }

}

說明: <1> Session.openActiveSession:開始login,第一個參數傳context, 第二個參數傳是否要用Facebook app Login UI, 第三個參數傳入當status改變時要執行的callback函式. <2> Request.executeMeRequestAsync: 發出/me的請求, 範例是去拿目前user的name.

9.可以開始寫自己的程式了!