Smaller APKs : Android におけるAPKを小さく保つためのテクニック

Android Performance Patterns Session にいい動画が上がっていたので、備忘録として中身を書き出しておく Removing Unused Resources Multi Resources Support Vector Drawables Reuse Existing Resources Removing Unused Code Apk Analyzer Removing Unused Resources gradle file にて以下の minifyEnabled と shrinkResources をセットしておく。 android { … buildTypes { release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } これらはアプリ内で使用していないリソースを除去してくれます。 Multi Resources Support Android がサポートしているリソースサイズを全て揃えるとそれだけで結構な量になるので、必要なものだけ使う。 ldpi mdpi から自動で作られる mdpi tvdpi 使わない hdpi xxhdpi から自動で作られる xhdpi xxhdpi から自動で作られる xxhdpi xxxhdpi mdpi xxhdpi xxxhdpi のみ使用する
Read more →

Android 5.0.2 以上でBLEが動かない

Occurrence -事象- Causes -原因- HID とは ? BLUETOOTH_PRIVILEGED とは? Summary -まとめ- HID を使ってるかの判断 禁止された Characteristic UUID なぜ禁止されたのか? Occurrence -事象- 機材とAndroid を BLE (Bluetooth low energy) で繋ごうとしたところ、Android 5.0.2以上の端末で Security Exception が発生した。 5.0.1 や 4.2 などは問題ないが、5.1や6.0で発生する。 エラー内容は以下のようになっている。 java.lang.SecurityException: Need BLUETOOTH_PRIVILEGED permission: Neither user 99999 nor current process has android.permission.BLUETOOTH_PRIVILEGED. 発生箇所は BluetoothGatt#setCharacteristicNotification Causes -原因- StackOverflow にほぼ発生事例そのままの報告がある、 Android 5.0.2 onwards don’t allow HID access through Bluetooth LE さらに、Android Issues に [BLE] Reading/writing char/descr of a HID service throws an exception があり、その中で
Read more →

JB_MR2(4.3)とKitKat(4.4)のPermission比較(メーカー署名関係)

Android 4.3 (JELLY_BEAN_MR2) が出て結構時間がたちました、恒例のsignatureがらみのPermission比較やらなきゃーと思って放置してたら4.4(Kitkat)が出ちゃったので慌てて更新します。 前回までのPermission比較は ICSとGingerbreadのPermission比較(メーカー署名関係) JBとICSのPermission比較(メーカー署名関係) JB(4.1)とJB_MR1(4.2)のPermission比較(メーカー署名関係) JB_MR1(4.2)とJB_MR2(4.3)のPermission比較(メーカー署名関係) にあります。 何調べてるの? 本記事は署名関係の Android Permission に注目してバージョン間の差分を比較しています。 これらの Permission が要求されるAPIに関してはOSビルド時の署名が必要になります。 メーカー端末であれば販売メーカーに依頼を出して署名をしてもらう必要がありますが、 通常出来ません。 よって3rdパーティアプリを作成する場合これらの Permission を要求されるAPIは使用不可能になります。 Androidはバージョンアップを重ねる毎にこれら Permission の締め付けがきつくなってるのでバージョンアップ毎にチェックしています。 JB MR2 と KitKatのプロテクションレベルの一覧比較 JB MR2 dangerous signature|system normal signature signature|system|development system|signature signatureOrSystem KitKat dangerous signature|system normal signature signature|system|development system|signature signatureOrSystem 特に変更なし Permission増減調査(JB MR1(4.2) > JB MR2(4.3)) [signature] これはメーカー署名がないと使用出来ないもの android.permission.BLUETOOTH_STACK android.permission.ACCOUNT_MANAGER android.permission.HARDWARE_TEST android.permission.NET_ADMIN android.permission.REMOTE_AUDIO_PLAYBACK android.permission.INTERACT_ACROSS_USERS_FULL android.permission.GET_DETAILED_TASKS android.permission.REMOVE_TASKS

  • android.permission.MANAGE_ACTIVITY_STACKS android.permission.START_ANY_ACTIVITY android.permission.SET_SCREEN_COMPATIBILITY android.permission.ACCESS_ALL_EXTERNAL_STORAGE android.permission.FORCE_STOP_PACKAGES android.permission.SET_PREFERRED_APPLICATIONS
Read more →

JB_MR1(4.2)とJB_MR2(4.3)のPermission比較(メーカー署名関係)

Android 4.3 (JELLY_BEAN_MR2) が出て結構時間がたちました、恒例のsignatureがらみのPermission比較やらなきゃーと思って放置してたら4.4(Kitkat)が出ちゃったので慌てて更新します。 前回までのPermission比較は ICSとGingerbreadのPermission比較(メーカー署名関係) JBとICSのPermission比較(メーカー署名関係) JB(4.1)とJB_MR1(4.2)のPermission比較(メーカー署名関係) にあります。 何調べてるの? 本記事は署名関係の Android Permission に注目してバージョン間の差分を比較しています。 これらの Permission が要求されるAPIに関してはOSビルド時の署名が必要になります。 メーカー端末であれば販売メーカーに依頼を出して署名をしてもらう必要がありますが、 通常出来ません。 よって3rdパーティアプリを作成する場合これらの Permission を要求されるAPIは使用不可能になります。 Androidはバージョンアップを重ねる毎にこれら Permission の締め付けがきつくなってるのでバージョンアップ毎にチェックしています。 JB MR1 と JB MR2 のプロテクションレベルの一覧比較 JB MR1 dangerous signature|system normal signature signature|system|development system|signature signatureOrSystem JB MR2 dangerous signature|system normal signature signature|system|development system|signature signatureOrSystem 特に変更はありませんね。 Permission増減調査(JB MR1(4.2) > JB MR2(4.3)) [signature] これはメーカー署名がないと使用出来ないもの android.permission.BLUETOOTH_STACK android.permission.ACCOUNT_MANAGER android.permission.HARDWARE_TEST android.permission.NET_ADMIN android.permission.REMOTE_AUDIO_PLAYBACK android.permission.INTERACT_ACROSS_USERS_FULL android.permission.GET_DETAILED_TASKS android.permission.REMOVE_TASKS android.permission.START_ANY_ACTIVITY android.permission.SET_SCREEN_COMPATIBILITY android.permission.ACCESS_ALL_EXTERNAL_STORAGE android.permission.FORCE_STOP_PACKAGES android.permission.SET_PREFERRED_APPLICATIONS
Read more →

Xperia Z tablet の初期化(no Companion)

Read more →

Xperia Z tablet の初期化(no Companion)

Read more →

JB(4.1)とJB_MR1(4.2)のPermission比較(メーカー署名関係)

Read more →

JB(4.1)とJB_MR1(4.2)のPermission比較(メーカー署名関係)

Android 4.2 (JELLY_BEAN_MR1) が出ましたので、恒例のsignatureがらみのPermission比較したいと思います。 前回までのPermission比較は ICSとGingerbreadのPermission比較(メーカー署名関係) JBとICSのPermission比較(メーカー署名関係) にあります。 何調べてるの? 本記事は署名関係の Android Permission に注目してバージョン間の差分を比較しています。 これらの Permission が要求されるAPIに関してはOSビルド時の署名が必要になります。 メーカー端末であれば販売メーカーに依頼を出して署名をしてもらう必要がありますが、 通常出来ません。 よって3rdパーティアプリを作成する場合これらの Permission を要求されるAPIは使用不可能になります。 Androidはバージョンアップを重ねる毎にこれら Permission の締め付けがきつくなってるのでバージョンアップ毎にチェックしています。 JB と JB MR1 のプロテクションレベルの一覧比較 JB dangerous signature|system normal signature signature|system|development signatureOrSystem JB MR1 dangerous signature|system normal signature signature|system|development system|signature signatureOrSystem 増えた?と思ったらパイプラインで区切られたフラグの順番が逆転していただけでした。 これは signature|system と同一ですね。 しかし signatureOrSystem の件といい、段々適当になってきてる気がする。 Permission増減調査(JB(4.1) > JB MR1(4.2)) [signature] これはメーカー署名がないと使用出来ないもの

  • android.permission.BLUETOOTH_STACK android.permission.ACCOUNT_MANAGER android.permission.HARDWARE_TEST android.permission.NET_ADMIN android.permission.REMOTE_AUDIO_PLAYBACK
  • android.permission.INTERACT_ACROSS_USERS_FULL android.permission.GET_DETAILED_TASKS android.permission.REMOVE_TASKS android.permission.START_ANY_ACTIVITY android.permission.SET_SCREEN_COMPATIBILITY
Read more →

Androidで共通鍵暗号化でつまづいたので記録に残す

Androidで文字列をセキュアに保存したい場合、 暗号化してsqliteに保存するのがよろしいと思われる。 ここではAndroid自体のセキュリティがアレだとか、Rooted端末とapktoolがあればアレをこうしてアレ出来るだとかいう話はとりあえず置いとく。 まず以下のようなソースを書いた。 内容は、 共通鍵の秘密鍵を生成している箇所のみ抽出。 DBに鍵が保存されていない初回はif文を迂回して生成ロジックで生成後DBに保存。 DB保存後はDBから復元する。 private final static String ARGOLISM = "PBEWithSHA1And256BitAES-CBC-BC"; private SecretKey getSecretKey() throws NoSuchAlgorithmException, InvalidKeySpecException, NameNotFoundException { // check saved secret key is exist. byte[] savedSecretKey = DBHelper.readByteData(context, "hoge"); if(savedSecretKey != null && savedSecretKey.length > 0){ return new SecretKeySpec(savedSecretKey, ARGOLISM); } // generate new secret key. char[] pw = generatePassword(); int iteratorCount = 1024; int keySize = 256; int saltLength = 8; byte[] salt = "00000000".
Read more →

JBとICSのPermission比較(メーカー署名関係)

以前書いた、ICSとGingerbreadのPermission比較(メーカー署名関係)の続編。 注意:今回の記事は https://android.googlesource.com/platform/manifest/android-4.1.1_r4 を元に書いてます。 またしてもJBで色々と Permission 関係が変わっているのでまとめてみた。 まず プロテクションレベルの表記が変わっている。 以前は signatureOrSystem と書かれていた箇所が signature|system に変更。 また謎の development も追加(詳細がドキュメントされていないので後日調査予定) まず ICS と JB のプロテクションレベルの一覧比較 ICS dangerous signatureOrSystem normal signature JB dangerous signature|system normal signature signature|system|development signatureOrSystem JB に signatureOrSystem が混じっているのは誤表記にあらず。 一個だけ何故か(恐らくミスだと思うけど) signatureOrSystem が混ざっている。 次それぞれのプロテクションレベル毎の比較 JB 方式の書き方だと今回はまとめにくいので、ICS方式で signature と signatureOrSystemでまとめてみる。 [signature] 赤字は追加分、新規追加のみ signatureOrSystem からの格上げなし android.permission.ACCOUNT_MANAGER android.permission.HARDWARE_TEST android.permission.NET_ADMIN android.permission.REMOTE_AUDIO_PLAYBACK android.permission.GET_DETAILED_TASKS android.permission.REMOVE_TASKS android.permission.START_ANY_ACTIVITY android.permission.SET_SCREEN_COMPATIBILITY android.permission.FORCE_STOP_PACKAGES android.permission.SET_PREFERRED_APPLICATIONS android.permission.ASEC_ACCESS android.permission.ASEC_CREATE android.permission.ASEC_DESTROY android.permission.ASEC_MOUNT_UNMOUNT android.permission.ASEC_RENAME android.permission.DIAGNOSTIC android.permission.STATUS_BAR_SERVICE android.permission.FORCE_BACK android.permission.INTERNAL_SYSTEM_WINDOW
Read more →