AndroidManifest.xml の <uses-library> が存在するか確認する方法

AndroidManifest.xml に <uses-library> で指定したライブラリが存在するか確認する方法を調べた。

すべての端末で使わないため required を false にする必要があった。しかしそうすると、ライブラリが存在しない可能性があるため NoClassDefFoundErrorNoSuchMethodError の例外が発生してしまう可能性がある。そこで Class.forName(String) でクラスの存在を確認して対応した。

だが端末によってライブラリのバージョンが違い、クラスは存在していてもメソッドが存在しないケースが出てきた。一つひとつ確認するのは面倒だったので、やはり <uses-library> が存在するか確認することにした。

PackageManager.html#getSystemSharedLibraryNames() というそのまんまのメソッドがあった。なんで今まで気づかなかったんだろ…。

Android

Android の DevicePolicyManager の addUserRestriction について

Profile Owner が DevicePolicyManager#addUserRestriction(ComponentName, String) を呼んだ場合にどうなるか確認した。

Continue reading

Android

Android 5.0 の Device Owner を有効にする方法

Device Owner の設定画面

Android 5.0 で追加された Device Owner を有効にする方法をメモっとく。

まずは、Device Owner となって端末を管理する MDM アプリを用意する。
それをサーバに置いてダウンロードできるようにする。
apk ファイルの checksum も控えておこう。nfc – Checksum Error while provisioning Android Lollipop – Stack Overflow を参考にした。

そして Device Owner の設定は Android Beam で起動できる。そのため、NdefMessage を送信するアプリを用意する。MDM アプリのパッケージ名と apk ファイルのダウンロード URL、そして checksum を Properties に詰め込んで送信する。

言語設定画面

ただし、Device Owner を有効にできるのはセットアップの終わっていない端末だけ。端末を初期化して、端末の言語設定画面のとろこで Android Beam を行うのだ。それ以外で送信しても、既に設定済みとなって有効にできない。

また、MDM アプリの apk ファイルをダウンロードするため、Wi-Fi を設定しなければならない。Android Beam でパッケージ名と一緒に Wi-Fi 情報も送信できるが接続できなかった。(Device Owner の有効に失敗した場合は端末を初期化するしかない)
しかたなく、Wi-Fi 設定を行ってから、戻って有効にした。

Android

Android 5.0 の Profile Owner を有効にする方法

Android 5.0 で追加される MDM 機能のひとつ、Profile Owner を有効にする方法をメモっとく。

L Preview と少しやり方が変わっていて、(勘違いだった) DevicePolicyManager#ACTION_PROVISION_MANAGED_PROFILE を起動すればいい。そして、DevicePolicyManager#onProfileProvisioningComplete(Context, Intent) でプロファイルを有効にするだけ。もちろん、デバイス管理者は有効でなければならない。

Android

既存の Android プロジェクトを Gradle な構成にしてみた

IntelliJ IDEA にインポートした構成Google I/O 2014 でも発表があった Build Variants に憧れて、Gradle 移行を試みた。
しかし、そのまま Migrating from Eclipse | Android Developers の通りに行うと、従来の構成に build.gradle や gradlew などが追加されただけ(右図)で、リソースの切り替えで汚くなりそうだなと思ったので、ちゃんとした? Gradle な構成にすることにした。

Continue reading

Android