dex2jar を使ってapk > jarに変換
jarをJava Decompilerで開く
と見れる。便利。
Tuesday, August 27, 2013
Proguard+parse.comのAndroidSDKの話
Parse.comのAndroidSDKを使ったアプリを開発して、最後にさあProguardかけて公開するぞって時にWarningsが出まくってantでビルドかからなかったり、apkは作れたんだけど難読化したらSDKの中で落ちたりしてはまったのを解決した話
ant release -> [proguard] Warnings:com.parse.... が出まくってbuild failedな時
-dontwarn com.parse.**
で、黙殺
ビルドはなんとか通ってapkは出来たが、実行時にSDKの中で落ちる時
ant release -> [proguard] Warnings:com.parse.... が出まくってbuild failedな時
-dontwarn com.parse.**
で、黙殺
ビルドはなんとか通ってapkは出来たが、実行時にSDKの中で落ちる時
sdkのコードは難読化しなくてよさそうなので
-keep class com.parse.**
で、Proguardの対象から外す
作成したapをdex2jarとJava Decompilerを使って解凍して内容を確認したところ開発分のソースは難読化されていたので大丈夫そうだった。
Monday, August 5, 2013
Android4.3変更点まとめ
* RestrictedProfile. 家庭で家族と、職場で、アプリとコンテンツに制限付きでアクセスできる
* Bluetooth Smartのサポート. Androidにフィットネスセンサーに接続する全ての新しい種類のアプリへの準備をさせる
* OpenGL 3.0のサポート
Audio
* 仮想surround sound対応
DialPad
* 発信番号オートコンプリート(オプトイン導入
Keyboard & Input
* タップタイピングの認識アルゴリズムが改善されて入力が簡単に。
* ゲームパッドやジョイスティックのための入力の応答が早くなった
Location
* Wifi経由の位置特定 - いちいちWifiをonにしなくてもWifi経由の位置特定ができるように。
Networking
* BluetoothSmartReadyサポート
* Bluetooth AVRCP 1.3サポート ... カーステレオで曲名を表示できるように。
Graphics
* OpenGL ES 3.0
* WirelessDisplay ... タブレットの映像をTVで移せる(Nexus7(2013) Nexus10)
Internationalization and localization
* 多言語サポート、対象言語の追加
* 右から左げ書く言語の表示サポート
Settings
* Disabled apps tab ... 設定からどのアプリが無効化されているか確認する事ができるようになった
System
* Restricted profiles ... アプリやコンテンツへのアクセスに制限がかかった状態を作ることができるようになった
* セットアップウィザードが簡単になった
* スクリーンロック状態からユーザーを切り替えるのが早くなった
* フォトのデイドリーム機能がさらに改善された
もうちょっとデベロッパ向けのページもあったので、そちらは後ほど。。
http://developer.android.com/about/versions/jelly-bean.html
もうちょっとデベロッパ向けのページもあったので、そちらは後ほど。。
http://developer.android.com/about/versions/jelly-bean.html
Monday, July 29, 2013
AndroidStudioが「Guilding XXX Gradle project info」で止まる
前回、AndroidStudioの起動まで意味もわからずできたが、その後プロジェクトの新規作成で「Guilding XXX Gradle project info」というポップアップが出て以降進まなくなった。
ログを見てみると相変わらず「WARN - .intellij.util.EnvironmentUtil - timed out」が出ている。
EnvironmentUtil#L132で環境変数$SHELLをとってから「-l -c /usr/bin/printenv」をしている。
$SHELLが/bin/bashをさしてたけども、そこを普段使っているzshをさすように.zshrcに「SHELL=/bin/zsh」とかして環境変数を変更したら無事プロジェクト作成まで完了した。
今回もよくわからず。。
ログを見てみると相変わらず「WARN - .intellij.util.EnvironmentUtil - timed out」が出ている。
EnvironmentUtil#L132で環境変数$SHELLをとってから「-l -c /usr/bin/printenv」をしている。
$SHELLが/bin/bashをさしてたけども、そこを普段使っているzshをさすように.zshrcに「SHELL=/bin/zsh」とかして環境変数を変更したら無事プロジェクト作成まで完了した。
今回もよくわからず。。
Tuesday, July 23, 2013
Android TextView get/setGravityの指定方法
TextViewの位置揃えに使うget/setGravityの記述方法でややはまった。
文字を左寄せにしようとしてsetGravity(Gravity.LEFT);とか書いた後にgetGravityすると最初に指定した値と全然違うものが帰ってくるのだ。色々原因を調べてみたのだが、どうやら、segGravityには水平、垂直方向両方の指定がなされる事を前提としているらしい。なのでsetGravityには水平、垂直方向両方の指定をするか、getGravity時にマスクをかけて任意の方向の値指定のみを取得する必要があるらしい
TextView#L2816(バージョン4.2.2)
ソースを眺めたら、setGravityでは垂直方向の指定がなされていない場合はGravity.TOP, 水平方向の指定がなされていない場合はGravity.STARTを自動的に指定する模様。
文字を左寄せにしようとしてsetGravity(Gravity.LEFT);とか書いた後にgetGravityすると最初に指定した値と全然違うものが帰ってくるのだ。色々原因を調べてみたのだが、どうやら、segGravityには水平、垂直方向両方の指定がなされる事を前提としているらしい。なのでsetGravityには水平、垂直方向両方の指定をするか、getGravity時にマスクをかけて任意の方向の値指定のみを取得する必要があるらしい
//Gravity.Leftのnumeric表現は3 textView.setGravity(Gravity.LEFT); final int gravityValue = textView.getGravity(); //gravityValue に3を期待するが実際は51が帰ってくる //正しくは以下のように水平、垂直方向両方の指定をする textView.setGravity(Gravity.LEFT|Gravity.TOP); //もしくはgetGravityした値に対して任意の方向のマスクをかけると垂直、水平方向のみの値が取得できる final int horizontalGravityValue = textView.getGravity & Gravity.HORIZONTAL_GRAVITY_MASK; //水平方向の値指定のみ取得 final int verticalGravityValue = textView.getGravity & Gravity.VERTICAL_GRAVITY_MASK; //垂直方向の値指定のみ取得
TextView#L2816(バージョン4.2.2)
ソースを眺めたら、setGravityでは垂直方向の指定がなされていない場合はGravity.TOP, 水平方向の指定がなされていない場合はGravity.STARTを自動的に指定する模様。
Sunday, July 21, 2013
Android タッチ時に対象Viewに枠線をつける(特殊編)
前提:
今回取り扱う問題は以下のちょっと特殊なViewで発生した話です。通常のViewでは発生しない問題かと思います。
* 自前で拡張してドラッグ&ピンチズームアウトされる
* ドラッグやピンチに従って自領域と座標を再描写し続ける
AndroidでViewをタッチしたときに色を変えたり枠線をつけたりというのはよくある話で、selectorを用意してitemのstate_pressedとかでshapeを書くような感じになると思うのですが、今回はitemのandroid:state_xxxで対応仕切れないタッチイベントの制御をしたかったのでそれらxml群は捨て、Viewを拡張して直接onDrawをいじる事にした。
素直にこんな感じのコードを書いたのですが、いざ動かしてみるとゆっくりドラッグしたとき不規則に枠線のゴミが残る。。(昔のWindowsでマシンの応答が悪いときにウィンドウをグリグリしたときみたいな感じ)
で、該当Viewの領域はドラッグに合わせて絶えず移動しているので、移動によって枠線が自分の領域の外になってしまい、そこの部分の再描写がかからずにゴミが残ってるのではという仮説の元
枠線を無理矢理Viewの領域の中に入れてみたらうまくいった。快適。
今回取り扱う問題は以下のちょっと特殊なViewで発生した話です。通常のViewでは発生しない問題かと思います。
* 自前で拡張してドラッグ&ピンチズームアウトされる
* ドラッグやピンチに従って自領域と座標を再描写し続ける
AndroidでViewをタッチしたときに色を変えたり枠線をつけたりというのはよくある話で、selectorを用意してitemのstate_pressedとかでshapeを書くような感じになると思うのですが、今回はitemのandroid:state_xxxで対応仕切れないタッチイベントの制御をしたかったのでそれらxml群は捨て、Viewを拡張して直接onDrawをいじる事にした。
private static final BACKGROUND;
private static final BORDER;
static {
BACKGROUND = new Paint();
BACKGROUND.setColor(Color.argb(192, 255, 0, 0));
BORDER = new Paint();
BORDER.setStyle(Paint.Style.STROKE);
BACKGROUND.setColor(Color.WHITE);
}
@Override
protected void onDraw(Canvas c) {
super.onDraw(c);
c.drawRect(0, 0, c.getWidth(), c.getHeight(), BACKGROUND);
c.drawRect(0, 0, c.getWidth(), c.getHeight(), BORDER);
}
素直にこんな感じのコードを書いたのですが、いざ動かしてみるとゆっくりドラッグしたとき不規則に枠線のゴミが残る。。(昔のWindowsでマシンの応答が悪いときにウィンドウをグリグリしたときみたいな感じ)
で、該当Viewの領域はドラッグに合わせて絶えず移動しているので、移動によって枠線が自分の領域の外になってしまい、そこの部分の再描写がかからずにゴミが残ってるのではという仮説の元
@Override
protected void onDraw(Canvas c) {
super.onDraw(c);
c.drawRect(0, 0, c.getWidth(), c.getHeight(), BACKGROUND);
c.drawRect(1, 1, c.getWidth()-1, c.getHeight()-1, BORDER);
}
枠線を無理矢理Viewの領域の中に入れてみたらうまくいった。快適。
Android Studioが起動しない
ローディングの画面で止まったり、その次のWelcome to Android Stuioの画面で固まったして全く進まなかったのが進むようになった話。結論から書くと僕の場合は普段zshなのだけどbashからApplications/Android Studio.app/Contents/MacOS/studioを叩いたら動いた、全く意味が分からない。
前提:
OSX
AndroidStudio AI-130,737875
JDK 1.6.0_33
WARN - .intellij.util.EnvironmentUtil - timed out
どうにもこうにも進まないので~/Library/Logs/AndroidStudioPreview/idea.logを確認したところ、起動直後にこのログが出てた。
https://android.googlesource.com/platform/tools/idea/+/934b9431b0b827a132df794e307fe5a2b70de00b/platform/util/src/com/intellij/util/EnvironmentUtil.java
でちょっとソースを追ってみると、ここのL134のコマンドが帰ってきてなくてプロセスをtimeoutさせてるらしき事が判明。
手元で該当コマンドを叩いても結果は帰ってくるものの中身が全くからだったので何となくbashから叩いてみると結果がちゃんと帰ってきた。そこで、もしかしたらbashからAndroidStudio叩けば動くかなーと思って最初の展開。全く意味が分からないがとりあえず動いた。
前提:
OSX
AndroidStudio AI-130,737875
JDK 1.6.0_33
WARN - .intellij.util.EnvironmentUtil - timed out
どうにもこうにも進まないので~/Library/Logs/AndroidStudioPreview/idea.logを確認したところ、起動直後にこのログが出てた。
https://android.googlesource.com/platform/tools/idea/+/934b9431b0b827a132df794e307fe5a2b70de00b/platform/util/src/com/intellij/util/EnvironmentUtil.java
でちょっとソースを追ってみると、ここのL134のコマンドが帰ってきてなくてプロセスをtimeoutさせてるらしき事が判明。
手元で該当コマンドを叩いても結果は帰ってくるものの中身が全くからだったので何となくbashから叩いてみると結果がちゃんと帰ってきた。そこで、もしかしたらbashからAndroidStudio叩けば動くかなーと思って最初の展開。全く意味が分からないがとりあえず動いた。
Subscribe to:
Posts
(
Atom
)