タグ

ブックマーク / yuki312.blogspot.com (13)

  • DevFest2017

    Android1.5~8.0 Walkthrough from Yuki Matsumura Android1.5~8.0 Walkthrough のセッションに登壇した際のスライドとスピーカーノートメモ、あと喋った内容の文字起こし. はじまり。 2017年8月に最新のOS Android8.0 コードネーム Oreoがリリースされました. アプリを Oreo に最適化するには TargetSdkVersion を 26 に上げる必要があります。 TargetSdkVersion を上げることで、Oreoの新機能を十分に活かすことができます。 ここ数年のアップデートでは システムリソースの消費を抑える DozeやAppStandby、バックグラウンド動作制限などがリリースされています。 これによって、ユーザは端末やアプリを使っていないときの バッテリー消費 を抑えることができます。 その一

    DevFest2017
  • Android: 現在時刻を固定するテストとTestRule

    Fixed current time. 時間に依存したAPIの振る舞いをテストする場合, 現在時刻を固定すればテストをRepeatableに保てます. 現在時刻を固定する次の2通りの方法を実装しました. java.timeを使った方法(Java8以降) java.utilを使った方法(Java7以前) テストの際に現在時刻を固定化する下準備として, 現在時刻を返すAPIをラップしたメソッドを用意します. public static long now() { return <現在時刻を返すAPI> } テストの際には固定時刻を返すように振る舞いを変更してやれば, このAPIに依存しているモジュールからするとあたかも現在時刻が固定化されているように見えます. 目的達成のためには, now()メソッドが常にダミーのepoch timeを返すように振る舞いを差し替える仕組みを用意する必要があります

  • Android: Gradle Project Report

    Gradle標準にビルド時のプロジェクト状態をレポートするProject Reports Pluginがあります. 稿はこのプラグインを使ってみたレポートです. 公式ドキュメントにあるObtaining information about your buildで触れられているいくつかのコマンドをGradleのタスクとして定義できます. 導入は非常に簡単で apply plugin: 'project-report' を宣言するだけです. これにより追加されるタスクについて紹介します. DependencyReport プロジェクトの依存関係ツリーをテキストファイル形式でレポートするタスクです. レポートはbuild/reports/projectフォルダ配下に出力されます. このタスクはコマンドラインで下記を実行した結果と等価です. ./gradlew dependencies 下記のよ

  • Android: よく使う静的解析ツール他のGradle定義

    Androidプロジェクトで頻繁に使用されるプラグインの導入ソースプログラムをプロジェクト作成の都度書き直すのは非効率的であるため, そういった繰り返し書かれるプログラムを下記にまとめ, 新規プロジェクト作成の際にはこれを適用することで対応できるようにする. GitHub-AndroidProjectTemplate 導入されるプラグイン 主要な静的解析ツールと各種ユーティリティが導入される. プラグインの導入ソースコード(gralde)は/android.gradleで定義されている. これに含まれるプラグインは次の通り. FindBugs Javaプログラム(バイトコード)の静的解析ツール. PMD Javaプログラム(ソースコード)の静的解析ツール. CheckStyle プログラムの体裁チェックツール. Lint Androidに特化した潜在的な不具合を検出する静的解析ツール. J

  • Android:GradleでBuildConfigに定数追加する際のハック

    Build variant毎に定数の値を変えたい場合, 下記のようにすることで実現できる. productFlavors { development { buildConfigField "boolean", "PRODUCTION_MODE", "false" } production { buildConfigField "boolean", "PRODUCTION_MODE", "true" } } しかし, この例ではプロダクションモードを判定する下記のようなif文を書いた場合にAndroidStudioがwaningをあげてくる. // これだとBuild variantによってPRODUCTION_MODEが常に // true/false固定となり, AndroidStudioがシンプル化をすすめてくる. if (BuildConfig.PRODUCTION_MODE) {

  • Android : AndroidStudio + PowerMock でstaticメソッドをmockする

    確認環境 Android Studio 1.1 Android Gradle Plugin 1.1 JUnit 4.12 PowerMock 1.6.2 はじめに Android Studio 1.1(android gradle plugin 1.1)からUnitTestがサポートされた. 今回はPowerMockを使ってstatic methodをモックするUnitTestを書いた. Android StudioでUnitTestを開始するには下記を参考. Unit testing support - Android Tools Project Site Gradle Plugin 1.1.0-rc1でJVMでテストを実行出来るようになったらしい UnitTestの準備が整ったならモジュールのbuild.gradleに下記の依存ライブラリを記述する. // UnitTestにはtest

  • Android: StethoでSQLite, Preferenceの中を覗く

    StethoはAndroidアプリケーション用のデバックブリッジ. Chrome Developer Toolsを使用してChrome Desktop Browserからリモートデバックを実現する. ネットワークパフォーマンスの解析等を可能にするが, SQLiteやPreferenceの中を覗くこともできる. 今回はStethoを使っPreferenceを確認してみる. http://facebook.github.io/stetho/ セットアップ Stethoライブラリを導入するために下記をgradleに追加. dependencies { compile 'com.facebook.stetho:stetho:1.0.0' } ProguardのShrink対象からstethoフォルダ配下を外す. -keep class com.facebook.stetho.** {*;} Ste

    Android: StethoでSQLite, Preferenceの中を覗く
  • Android:Activityスタックの状態をダンプして確認する方法

    下記のコマンドを実行することで、現在動作しているActivityやActivityスタックの状態 をダンプして確認することが可能です。 adb shell dumpsys activity activities 実行すると下記のようなログが大出力されます。 # ダンプログ出力元クラスは下記 # com.android.server.am.ActivityManagerService.dumpHistoryList #     (FileDescriptor, PrintWriter, List, String, String, boolean, boolean, boolean, String) ACTIVITY MANAGER ACTIVITIES (dumpsys activity activities) Main stack: * TaskRecord{411ae508 #2 A c

  • Android:CursorAdapterコンストラクタの一部非推奨化

    Android3.0以降、CursorAdapterコンストラクタの引数"flag"に制約が追加されました。 この変更はサブクラスであるResourceCursorAdapterやSimpleCursorAdapterにも影響します。 Android2.3.x以前は、コンストラクタの引数"flag"に設定可能な値としてFLAG_AUTO_REQUERY が存在していましたが、Android3.0以降これは非推奨となりました。 http://developer.android.com/reference/android/widget/CursorAdapter.html#FLAG_AUTO_REQUERY ●非推奨となるAPI 注意すべきポイントは、flag指定を省略したコンストラクタである下記は、デフォルトで flagにFLAG_AUTO_REQUERYを設定します。 CursorAdap

  • Android:Messengerの基本

    プロセス間の双方向通信をサポートするサービスにはAIDLとMessengerが存在します。 AIDLとMessengerの主な違いは下記になります。 ●AIDL サービスホスト(以降ホスト)は.aidlを作成し、サービスクライアント(以降クライアント)はこれを取り込む必要がある クライアントからのリクエストはBinderThread経由で、全てのリクエストが非同期通信となる ホストは必要に応じてクライアントからのリクエストをスレッドセーフに扱う必要がある .aidlに変更があった場合、クライアントも合わせてこれを更新する必要がある ●Messenger ホストとクライアント間の通信はHandler-Messageの仕組みで実現されているため.aidlが不要 クライアントからのリクエストはHandler経由で通知され、全てのリクエストが同期通信となる ホストとクライアント間のメッセージはMe

    Android:Messengerの基本
    s_ryuuki
    s_ryuuki 2013/02/12
    AIDLとMessengerの主な違い
  • Android:manageSpaceActivityによるデータ管理

    アプリ管理画面(右図)には、アプリデータを削除するためのボタン[データを消去]が用意されています。 この機能はデータベースを含むアプリデータ全てを消去するものです。 つまり、消去の対象には"アプリの設定情報"も含まれます。 ユーザはストレージの空き容量を確保する目的でこの機能を使用することがあります。 しかし、アプリデータの全削除が空き容量を確保するためのベストな手段とは限りません。 「アプリの設定情報は残して、不要で無駄にサイズの大きなデータを削除したい」と思うユーザもいるでしょう。 このような場合は、"アプリデータ管理用Activity"の採用を検討します。 ●ManageSpaceActivity 開発者は[データを消去]ボタンが押された場合に、データの消去ではなく 指定のActivityを起動するようカスタマイズすることができます。 指定するにはAndroidManifest.xm

    Android:manageSpaceActivityによるデータ管理
  • Android:JBで追加されたREAD_EXTERNAL_STORAGE

    ●はじめに JellyBeanでREAD_EXTERNAL_STORAGE権限が追加されました。 READ_EXTERNAL_STORAGE権限は外部SDカードの読み込みを制御するものです。 JBにおいて、この権限は将来有効化される"予約された権限"という位置付けです。 (SDカードを読み込むアプリは、将来READ_EXTERNAL_STORAGE権限が必要になるということです) そのため、JBでのREAD_EXTERNAL_STORAGE権限は何の効力も持ちません。 宣言を見ても、テスト用であることがわかります。 <!-- Allows an application to read from external storage --> <permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:pe

    Android:JBで追加されたREAD_EXTERNAL_STORAGE
  • Android:Menuボタンの廃止とActionBar

    Android3.0 (Honeycomb)以前のアンドロイド端末はMenuボタンを備える必要がありました。 しかし、Android3.0で物理的なMenuボタンへの依存が排除されたため、Menuボタンを持た ない端末が登場しました。 ●Honeycomb以降のMenuボタンに変わるもの Honeycomb以降は物理的なMenuボタンを持つ、あるいは持たない端末の両方をサポートする必要があります。(Menuキーを持たない端末としてGalaxy Nexusがあります) Honeycomb以降でもオプションメニューはサポートされています。 オプションメニューにアクセスするためのUIとしてMenuボタンの代わりにActionButtonとOverflowButtonが用意されました。 ●Gingerbread以前との互換性 Menuボタンを持たない端末でGingerbread以前を対象としたアプ

    Android:Menuボタンの廃止とActionBar
  • 1