2015年6月29日 星期一

[Android]如何從 APK 拿到 SHA1 key

解開 apk 檔案取得
META-INF\CERT.SF

keytool -printcert -file CERT.RSA
就可得到如下結果

擁有者: EMAILADDRESS=oneplus@oneplus.cn, CN=OnePlus, OU=SW, O=OnePlus, L=Shenzhen, ST=Guangdong, C=CN
發出者: EMAILADDRESS=oneplus@oneplus.cn, CN=OnePlus, OU=SW, O=OnePlus, L=Shenzhen, ST=Guangdong, C=CN
序號: 8abe4e1ae1d847f1
有效期自: Thu May 07 15:25:19 CST 2015 到: Mon Sep 22 15:25:19 CST 2042
憑證指紋:
         MD5:  62:08:F4:ED:35:9F:F6:60:43:A0:31:A7:A7:9B:F6:06
         SHA1: B7:91:45:D7:9F:8F:14:C2:6C:68:EC:BB:27:8D:56:AE:43:65:B1:61
         SHA256: 46:81:AD:50:CA:FC:58:0E:DF:E0:27:BD:3F:E5:93:25:4E:72:CD:2D:EF:1B:35:1F:EA:30:6C:CF:62:20:CF:07
         簽章演算法名稱: SHA1withRSA
         版本: 3

擴充套件:

#1: ObjectId: 2.5.29.35 Criticality=false
AuthorityKeyIdentifier [
KeyIdentifier [
0000: 54 61 E2 B1 A9 15 E1 4D   9F 0F 92 DD 48 01 13 31  Ta.....M....H..1
0010: A8 49 AE 64                                        .I.d
]
]

#2: ObjectId: 2.5.29.19 Criticality=false
BasicConstraints:[
  CA:true
  PathLen:2147483647
]

#3: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 54 61 E2 B1 A9 15 E1 4D   9F 0F 92 DD 48 01 13 31  Ta.....M....H..1
0010: A8 49 AE 64                                        .I.d
]
]














2015年6月14日 星期日

[Android]產生keystore

release:


$ keytool -genkey -v -keystore my-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000


debug:


$ keytool -genkey -v -keystore debug.keystore -storepass android -alias androiddebugkey -keypass android -keyalg RSA -keysize 2048 -validity 10000


get release finger print:


$ keytool -list -v -keystore [keystore path] -alias [alias-name] -storepass [storepass] -keypass [keypass]



get debug finger print:

$ keytool -list -v -keystore debug.keystore -alias androiddebugkey -storepass android -keypass android

2015年5月30日 星期六

[Android] google Map API usage 使用方法



google play service 常常變來變去
最近的用法是要滿足以下步驟

1. 加權限

AndroidManifest.xml
//  google map
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
//  location service
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

2. 加 meta data
   <application
        android:allowBackup="true"
        android:icon="@drawable/logo"
        android:label="@string/app_name" >
        <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="xxxxxxx_your_key" />
        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />


3. 加 code 這是版本改變導致最大的變化


final GoogleMap map = mapView.getMap();
    final float zoomLevel = 16.0f;

m_GoogleApiClient = new GoogleApiClient.Builder(PageNear.this.getActivity())
        .addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks(){

@Override
public void onConnected(Bundle connectionHint) {
// TODO Auto-generated method stub
Log.d("", "");
Location location = LocationServices.FusedLocationApi.getLastLocation(m_GoogleApiClient);
map.moveCamera(CameraUpdateFactory.newLatLngZoom(
                        new LatLng(location.getLatitude(), location.getLongitude()), zoomLevel));

}

@Override
public void onConnectionSuspended(int cause) {
// TODO Auto-generated method stub
Log.d("", "");
}})
        .addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener(){

@Override
public void onConnectionFailed(ConnectionResult result) {
// TODO Auto-generated method stub
Log.d("", "");
}})
        .addApi(LocationServices.API)
        .build();

        m_GoogleApiClient.connect();




2015年5月24日 星期日

2015年5月20日 星期三

[Android] MediaStore 的 databases 存在哪

/data/data/com.android.providers.media/databases/internal.db
/data/data/com.android.providers.media/databases/external.db


看你的資料存在哪,sdcard 是在 external.db



2015年5月6日 星期三

[Android]如何正常結束一個 HandlerThread

mHandlerThread.getLooper().quit()or
mHandlerThread.getLooper().quitSafely()

better

細節可直接攻讀 android 程式碼
http://developer.android.com/reference/android/os/Looper.html#quitSafely()


2015年4月18日 星期六

[IT] 解決 Chrome瀏覽器的異常,像是玉山 webatm不能用,旺旺 百度等 plugin

發生原因:Chrome 不在預設支援 NPAPI


Chrome 的 NPAPI 支援

Web 瀏覽器的 Java 外掛程式有賴於所有主要 Web 瀏覽器長久以來一直支援的跨平台外掛程式架構NPAPI。Google 於 2013 年 9 月宣布計畫將在 2014 年底終止 Chrome 的 NPAPI 支援,進而實際上停止對 Silverlight、Java、Facebook 影片以及其他類似 NPAPI 形式之外掛程式的支援。但最近 Google 修改了其計畫,現在宣佈他們計畫在 2015 年下旬完全移除 NPAPI。在 2015 年 4 月,Google 從 Chrome 版本 42 開始,新增了額外的步驟,以設定執行以 NPAPI 為基礎的外掛程式 

解決方法 :

在 Chrome 版本 42 及更新版本啟用 NPAPI

在 Chrome 版本 42 中,需要額外的組態步驟以繼續使用 NPAPI 外掛程式。
  1. 在您的 URL 列輸入:
    chrome://flags/#enable-npapi 
  2. 按一下啟用 NPAPI 組態選項的啟用連結
  3. 按一下組態頁面底端出現的立即重新啟動按鈕