カテゴリー : Android

[Android] Nexus7で「開発者向けオプション」を表示して「USBデバッグ」を有効にする方法

Nexus7(ネクサスセブン)で「開発者向けオプション」を表示して「USBデバッグ」を有効にする方法をご紹介します。


「開発者向けオプション」の表示方法

[設定] > [タブレット情報] の「ビルド番号」という項目を7回タップします。

そうすると、設定に「開発者向けオプション」という項目が表示されます。


「USBデバッグ」を有効にする

[設定] > [{ }開発者向けオプション] にて、「USBデバッグ」のチェックボックスにチェックを入れます。

以上です。

[Android] FILL_PARENT は非推奨(deprecated)なので MATCH_PARENT を使う(Android2.2以降)

Android アプリ開発にて、2.2以降 は FILL_PARENT は非推奨(deprecated)なので MATCH_PARENT を使うべきだそうです。

ただ、名前変更だけのリファクタリングらしいですが。

[参考]

Yukiの枝折: Android:match_parentとfill_parent

[Android] Crittercism でリアルタイムにクラッシュレポートを把握する

Android アプリに、リアルタイムにクラッシュレポートを把握できる「Crittercism」というサービスを導入しました。

Crittercism | Mobile Application Performance Management

無料版でも、充分使えてかなり助かってます。

今回は、公式ドキュメントに書かれている内容に自分で調べたメモを追加しました。

Crittercism – Installation Instructions

以下、実際に使ってるコードをメモ。

AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET"/>

READ_LOGS パーミッションについては、ユーザの半分以上が Android 4.1 以上の端末を使っていたので、付与しませんでした。

Android 4.1 以上での動作について Android 4.1 (Jelly Bean) 以上の端末では、この設定を行わなくてもリモート LogCat は機能します。一方、セキュリティ上の理由から、アプリ自身のプロセスから出力されたログ以外は、参照することができません。

[引用]:リモートLogCatの有効化 – DeployGate

MainActivity.java

initCrittercism メソッドは、onCreate メソッドから呼び出します。

import com.crittercism.app.Crittercism;
 
/**
 * Initialize Crittercism (Error reporting and monitoring tool.)
 * http://www.crittercism.com
 */
private void initCrittercism() {
    JSONObject crittercismConfig = new JSONObject();
    try {
        // include version code in version name
        crittercismConfig.put("includeVersionCode", true);
        // necessary for collecting logcat data on Android Jelly Bean devices.
        crittercismConfig.put("shouldCollectLogcat", true);
    } catch (JSONException je) {
    }
 
    Crittercism.init(getApplicationContext(), "<CRITTERCISM_APP_ID>", crittercismConfig);
}

proguard.cfg

proguard を使う場合は、下記の設定も追加しておきましょう。

-keep public class com.crittercism.**
 
-keepclassmembers public class com.crittercism.*
{
    *;
}

最後に、READ_LOGS パーミッションについてよく分からなくて、サポートに問い合わせた時の返信内容をメモ。

Hey,

I’ll try to give you a brief tour of this permission and how it interacts with Crittercism.

Crittercism does not require the READ_LOGS permission in order to function correctly. However, by enabling this permission (where applicable), it can provide additional useful information with every crash and exception report that Crittercism receives.

The Android API:

The logs permission functions in two very different ways depending on the version of the Android API. For versions 15 and lower, any access to the logs requires this permission, and its inclusion gives complete access to all log entries.

As you mentioned, such a global permission poses a potential security risk, and at the very least raises questions about data separation. For this reason, starting in Jelly Bean (API version 16 and higher), Google changed its policy about log access.

After the policy change READ_LOGS no longer works for API Level 16 and higher. With these versions, each app has access to log entries generated by the app itself.

To enable logcat collection for newer devices, you need to include the following code in the onCreate() method of your main activity:

// create the JSONObject. (Do not forget to import org.json.JSONObject!) 
JSONObject crittercismConfig = new JSONObject(); 
try 
{ 
crittercismConfig.put("shouldCollectLogcat", true); // send logcat data for devices with API Level 16 and higher 
} 
catch (JSONException je){}
 
Crittercism.init(getApplicationContext(), "<CRITTERCISM_APP_ID>", crittercismConfig);

Does that answer your questions? For further details, please refer to our documentation, here https://app.crittercism.com/developers/docs-android#including_logcat .

Best regards,

以上です。

[Android] Google Analytics の使い方の参考情報

Android アプリで、Google Analytics を使うために参考にした情報をまとめました。

Google Analytics 公式ドキュメント

Google Analytics SDK for Android v2 (Beta) – Overview

Google Play のダウンロードがどこ経由かトラッキングするためのキャンペーンのパラメータ付きURLを簡単に生成できるツール
Campaign Measurement – Android SDK – Google Analytics

チームEGGによる翻訳ドキュメント

① 「概要」
②「高度な設定」
③「キャンペーントラッキング」
④「クラッシュと例外」
⑤「ディスパッチング」
⑥「eコマーストラッキング」
⑦「イベント」
⑧「スクリーン」
⑨「セッション」
⑩「ユーザータイミング」
⑪「EasyTrackerパラメータ」

[Android] Facebook SDK でエラー : Failure delivering result ResultInfo{who=null, request=64206, result=0, data=null} to activity {com.example/com.facebook.LoginActivity}: java.lang.NullPointerException

Facebook SDK for Android v3.0 でログイン処理時に NullPointerException エラーが発生しました。

Stack Trace
0	java.lang.RuntimeException: 
Failure delivering result ResultInfo{who=null, request=64206, result=0, data=null}
to activity {com.example/com.facebook.LoginActivity}: java.lang.NullPointerException
1		at android.app.ActivityThread.deliverResults(ActivityThread.java:2980)
2		at android.app.ActivityThread.handleSendResult(ActivityThread.java:3023)
3		at android.app.ActivityThread.access$1100(ActivityThread.java:123)
4		at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1177)
5		at android.os.Handler.dispatchMessage(Handler.java:99)
6		at android.os.Looper.loop(Looper.java:137)
7		at android.app.ActivityThread.main(ActivityThread.java:4424)
8		at java.lang.reflect.Method.invokeNative(Native Method)
9		at java.lang.reflect.Method.invoke(Method.java:511)
10		at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
11		at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
12		at dalvik.system.NativeStart.main(Native Method)
13	Caused by: java.lang.NullPointerException
14		at com.facebook.AuthorizationClient$KatanaProxyAuthHandler.onActivityResult(SourceFile:645)
15		at com.facebook.AuthorizationClient.onActivityResult(SourceFile:142)
16		at com.facebook.LoginActivity.onActivityResult(SourceFile:134)
17		at android.app.Activity.dispatchActivityResult(Activity.java:4676)
18		at android.app.ActivityThread.deliverResults(ActivityThread.java:2976)
19		... 11 more
20	java.lang.NullPointerException
21		at com.facebook.AuthorizationClient$KatanaProxyAuthHandler.onActivityResult(SourceFile:645)
22		at com.facebook.AuthorizationClient.onActivityResult(SourceFile:142)
23		at com.facebook.LoginActivity.onActivityResult(SourceFile:134)
24		at android.app.Activity.dispatchActivityResult(Activity.java:4676)
25		at android.app.ActivityThread.deliverResults(ActivityThread.java:2976)
26		at android.app.ActivityThread.handleSendResult(ActivityThread.java:3023)
27		at android.app.ActivityThread.access$1100(ActivityThread.java:123)
28		at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1177)
29		at android.os.Handler.dispatchMessage(Handler.java:99)
30		at android.os.Looper.loop(Looper.java:137)
31		at android.app.ActivityThread.main(ActivityThread.java:4424)
32		at java.lang.reflect.Method.invokeNative(Native Method)
33		at java.lang.reflect.Method.invoke(Method.java:511)
34		at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
35		at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
36		at dalvik.system.NativeStart.main(Native Method)

Facebook SDK for Android v3.0 のバグらしいので、v3.0.1 にアップデートすることで解決します。

[参考情報]

NullPointerException on pressing back on native facebook login- Facebook Developers

Exception on pressing back at facebook login – Stack Overflow