2018年11月9日金曜日

Activityのスタックを確認したいとき

目的

特定のアプリで生きているActivityの一覧を確認する。

前提

・PCでadbコマンドが実行できる状態
・確認したいアプリが起動している端末のUSBデバッグが有効な状態
・PCに端末が接続されている

次のコマンドを実行する

adb shell dumpsys activity activities | grep "Run" | grep "(パッケージ名)"


2018年7月4日水曜日

AndroidでC / C++ファイルがビルドできなくなったときに確認すること

環境

Android Studio 3.1.3
Mac OS X 10.13.1

確認すること

 1.環境が整っているか

Tools > Android > SDK Manager の 
[LLDB]、[CMake]、[NDK]がインストールされているかなど、

https://developer.android.com/studio/projects/add-native-code?hl=ja

このページの設定が一通りできているか確認する

2.".externalNativeBuild"フォルダを削除

<project-root>/<module-root>/.externalNativeBuild フォルダを削除し、再度ビルドする

3.プロジェクトをクリーンする

Build > Clean Project
を実行する

4.キャッシュをクリアする

File > Invalidate Caches / Restart
を実行し、Android Studioを再起動する

5.NDKのバージョンを変更してみる

Android StudioのNDKをダウングレードする方法

環境

Android Studio 3.1.3
Mac OS X 10.13.1

やりたいこと

Android Studioで利用しているNDKのバージョンをダウングレード
今回はr17bから16bにダウングレード

NDKのバージョンを確認

Android Studio > Preferences... > Appearance & Behavior > System Settings > Android SDK > SDK Tools

ダウングレードの手順

1.ダウングレードしたいバージョンのNDKをダウンロード

ここ( https://developer.android.com/ndk/downloads/older_releases )から欲しいバージョンをダウンロードする。

2.Android-sdkのndkを1.でダウンロードしたものと置き換える

SDKの場所をPreferencesで確認

Android Studio > Preferences... > Appearance & Behavior > System Settings > Android SDKのAndroid SDK Location

ndkのフォルダを置き換え

Android SDK Locationの「ndk-bundle」を削除→1.でダウンロードしたフォルダを「ndk-bundle」にリネームし、Android SDK Locationに配置

3.NDKのバージョンを確認

17.1.4828580 から 16.1.4479499 にバージョンが変化していることを確認

2018年7月3日火曜日

BottomNavigationViewのテキストを常に表示する

確認バージョン

supportLibrary: '28.0.0-alpha3'

やりたいこと

BottomNavigationViewの各項目すべてのテキストを常に表示し、Shiftingさせない

対応方法

layoutのxmlファイルでBottomNavigationView にapp:labelVisibilityMode="labeled"を設定する

<android.support.design.widget.BottomNavigationView
    android:id="@+id/bottom_navigation_view"
    android:layout_width="match_parent"
    android:layout_height="56dp"
    android:layout_gravity="bottom"
    android:background="@color/white"
    app:elevation="8dp"
    app:labelVisibilityMode="labeled"
    app:itemIconTint="@color/slector_bottom_navigation"
    app:itemTextColor="@color/slector_bottom_navigation"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:menu="@menu/bottom_navigation" />


heightの56dpは、https://material.io/design/components/bottom-navigation.html#specs を参考

✕今までの対応方法(P以降の端末では正常動作しない)

val menuView = view.getChildAt(0) as BottomNavigationMenuView
try {

    val shiftingMode = menuView::class.java.getDeclaredField("mShiftingMode")
    shiftingMode.isAccessible = true
    shiftingMode.setBoolean(menuView, false)
    shiftingMode.isAccessible = false

    for (i in 0 until menuView.childCount) {
        val bottomNavigationItemView = menuView.getChildAt(i) as BottomNavigationItemView
        bottomNavigationItemView.setShiftingMode(false)
        bottomNavigationItemView.setChecked(false)
    }
} catch (e: NoSuchFieldException) {
    Log.d(TAG, "ERROR", e)
} catch (e: IllegalAccessException) {
    Log.d(TAG, "ERROR", e)
}

↑これだと、non-SDKのリストのリフレクションを利用しているため、
バージョンがAndroid P以降の端末でExceptionが発生するので、実装不可

Androidのnon-SDKのリスト確認場所

https://android.googlesource.com/platform/prebuilts/runtime/+/master/appcompat/



2018年4月16日月曜日

Kotlinフォルダ内のソースのブレークポイントがスルーされて焦った

状況

デバッグ実行できるが、ブレークポイントで処理が止まってくれない

確認環境

Android Studio 3.1.1
macOS Sierra 10.12.6

プロジェクトの状態

Empty Activityのみ

新規プロジェクト作成でinclude Kotlin supportをチェックしてプロジェクト作成

ソースファイルのjavaフォルダをkotlinにリネーム

必要だった対応

sourceSetsの記述を追記したら、ブレークポイントが正常に動作しました。

android {
    // ...

    sourceSets {
        main.java.srcDirs += 'src/main/kotlin'
    }
}

2017年7月20日木曜日

[Kotlin]スコープ関数のlet, with, run, apply, also の違い

を3日くらいにらめっこして、Kotlinのスコープ関数の違いについてざっくりとまとめてみました。

確認環境
Android Studio 3.0 Canary 7
Kotlin 1.1.3-2
macOS Sierra 10.12.15


returnがレシーバ returnが任意
レシーバの
拡張関数
apply with
run
任意の型の
拡張関数
also let

レシーバの拡張関数のとき
  • thisがラムダ式の内と外で参照先が違う
  • レシーバのprotected, privateの関数は呼び出せない
  • this@MainActivityのような記述で、外のthisも呼び出し可能

任意の型の拡張関数のとき
  • thisがラムダ式の内と外で参照先が一緒
  • レシーバをitで呼び出せる
  • itの代わりに任意の変数名の定義も可能(可読性UPに繋がる)

returnがレシーバのとき
  • 戻り値がレシーバ自身なので、用途に合っていれば1行コードが減る