idea.vmoptions で起動時のメモリ割り当てサイズを変更する Android Studio の環境設定の小ネタです。Android Studio (IntelliJ IDEA) でも Eclipse のときみたいに「起動時にどのくらいまでメモリを使うことを許容するか」メモリ割り当てを変更することができます。 手順は簡単。~/Library/Preferences/AndroidStudioPreview (Windows は $IDEA_HOME/bin/idea.exe.vmoptions) に idea.vmoptions というファイルを作り、以下のようなオプションを書くだけです! -Xms512m -Xmx1024m -XX:MaxPermSize=512m -XX:ReservedCodeCacheSize=128m -XX:+UseCodeCacheFlushing
Guavaとは GuavaはGoogle製のクラスライブラリです。 このへんによるとAPI Level9のNFCDemoというクラスで使われています。 AndroidでGuavaとProGuardを使ってみる Guavaを使ったプロジェクトのビルドでProGuardを使う場合には、 Guavaプロジェクトのドキュメント(UsingProGuardWithGuava)だけではうまく行きません。 ビルドを実行すると以下のようなエラーメッセージが出力されます。 このメッセージは、sun.misc.Unsafeが解決できないため処理が続行できない旨を報告するものです。 Proguard returned with error code 1. See console Warning: com.google.common.primitives.UnsignedBytes$Lexicographical
前回のエントリで紹介したBundleSaverを作成する際に、SparseArrayというクラスの存在を知りました。 SparseArrayは、Android向けにつくられたパフォーマンスに優れたHashMap代用とのことで、その使い方と気になる性能について調べてみました。 実際に測定することでメリットやデメリットがわかったので、ご紹介します。 SparseArrayってなぁに? どう使うの? HashMap と SparseArray の性能比較 考察 まとめ 参考(計測に利用したクラス) 1. SparseArrayってなぁに? SparseArrayは、キーにintを利用することを前提としたHashMapだと考えると分かりやすいかと思います。 (Integerではなく、intです。) また、SparseArrayでは、値にObject型を格納できますが、値がint, booleanの
AndroidアプリはJava/JDKを使ってビルドしますが、少し前までJDK7ではリリースビルドできませんでした。 2013/02/05追記: 既に最新のAndroid SDK (r21で確認)ではこの記事に書いてあることをやらなくてもJDK7でビルドできるようになっています。 AndroidアプリはJava/JDKを使ってビルドしますが、少し前までJDK7ではリリースビルド(ant release)できませんでした。正確にはビルド自体はできるけど実機にインストールできないバイナリができてしまっていたのです。しかしあれから半年がたち、気がついたらリリースビルドするための条件が揃っていたのでちょっとやってみましょう。 必要なもの まずrequirementsですが、まぁ私が試した各ソフトウェアのバージョンです。 Android SDK r19 (r18をDL後SDK managerでupd
有限であるモバイル端末のメモリを無駄に消費するアプリは悪だ。そんなアプリのソースコードレビュー担当者の目は節穴だ。 と言われないためか否かは知らないけど、Android Developers - Avoiding Memory Leaksでは、Androidアプリを作成する上で、メモリリークが発生するパターンとその対処法を色々と紹介している。(英語) 要点のみを自分が見直し易いようにまとめつつ、説明の足りてない「非staticな内部クラスが駄目な件」について書いてみる。 そもそもメモリリークするん?Java実行環境下では、ガベージコレクタによるメモリ管理が行われているため大抵の場合は意識せずともメモリをいい感じに回収してくれる。だが、ガベージコレクタの動作を妨げるようなコードを書いてしまうと、いつまで経っても解放されるべきメモリが解放されなくなる。これが今回のお題であるJavaにおけるメモ
Android SDKで使えるHTTPクライアントクラスについて、gitから取ってきたソースを見つつその挙動を調べてみる。賞味期限の短い記事だと思うので、利用には注意してほしい。 Android SDKで使えるHTTPクライアントクラスは三つある。 java.net.HttpURLConnection org.apache.http.impl.client.DefaultHttpClient android.net.http.AndroidHttpClient android.net.http は API Level 8 からで、当面の間は使うことができないだろう。 残り2つのうち、今回は古き良き java.net.HttpURLConnection について調べてみた。 java.net.HttpURLConnection Android OS 2.1 では、実際に使われるクラスはorg
前回に引き続きバッファロー社のパソコン用学習リモコン「PC-OP-RS1」をAndroidから制御するプログラムを作成します。今回と次回では、Androidフレームワークの作成、独自SDK、Androidアプリケーションまでを解説します。 日本Androidの会 金沢支部 出村成和 前回は、Linuxカーネルへのデバイスドライバの組み込みから始め、「HAL」(Hardware Abstraction Layer)レベルのドライバや、リモコンの信号を送受信するテストアプリケーションを作成しました。 今回はその続きとして、前回C/C++言語で作成した「libpcremocon.so」ライブラリを、Javaで作成するAndroidアプリケーションから呼び出せるようにします(図1)。 さらに、既存のAndroidフレームワークに追加してJavaのクラスライブラリを作り、それを独自SDKとして1つに
アノテーションプロセシングツール(APT)のまとめとして、テンプレートメソッドパターンの具象クラスを自動生成するアノテーションプロセッサについて書いておこうと思う。 テンプレートメソッドパターンとは? いわずとしれたオブジェクト指向実装設計における、継承関係を利用した抽象->具象実装を利用した汎用的なデザインパターン。※オブジェクト指向設計を学ぶにあたり最も理解しやすいパターンの一つなので、GoF本で紹介される以前から最もメジャーに使用されてきたパターンだ。 Template Method パターン - Wikipedia 抽象クラスを用意する 別に具象クラスでも良いのだが、テンプレートとなるルートクラスはインスタンス化しない抽象クラスで用意することが多い。 今回は対象プラットホームをAndroidとし、サーバからHTTPレスポンスとして取得したストリームからXMLをパースする、XlmPu
JRuby開発者Charles NutterがOracleの対Google訴訟を考察、「心配するな。特許は大した内容じゃないし、OracleにはAndroidを潰す動機はない」 オープンソースのJRuby(Java実行環境上のRuby言語処理系)開発者であり、元Sun Microsystyems社員でもあるCharles Nutter氏(現在はSunを離れEngine Yard勤務)が、Oracleの対Google訴訟に関して、Blog上で長文の考察を発表している。 Javaテクノロジとオープンソースに強力な関心、知識、実績を持ち、しかも当事者であるSunの事情も承知していて、現在は第3者の立場にある書き手だ。このBlogは、Oracle-Google訴訟の現状を把握する上では必読である。 一言でいって、Nutter氏は「特許は大した内容じゃないし、OracleがAndroidを潰す動機は
アノテーションプロセッサを実装するための"Pluggable Annotation Processing API"はJava6から実装された機能であり、残念ながらAndroidプラットホームでは使えない。がしかしEclipse自体はJava6で動作しており、プラグイン、コンパイラ等は全てJava6上で動作しているため、以下の条件を満たせばAndroidプロジェクトに対してアノテーションプロセッサを適用することが可能である。 Androidのクラス群にアクセスしない(Dalvikランタイムにアクセスしない) これだけだ。Annotation Processorの起動は適切な設定を行うことでEclipseがやってくれる。(プラグインorg.eclipse.jdt.apt.pluggable.coreが担当する) アノテーションプロセッサを実装するための"Pluggable Annotation
今日のエントリは@vvakameさんのTwitterでの一連の呟きから閃いて書いた。 AndroidはJava言語とその周辺の環境を利用して開発する。 Java言語は元々プリプロセッサを持たず、お世辞にもリッチとはいえないビルド環境※のお陰で、ランタイムに全ての処理を行うようにプログラミングしがちだ。それはAndroidでも変わらない(変わってくれると良かったのだが) 例えば、現在書いているライブラリィはどこにあるか解らないアクションクラスを前もって内部に登録するためにAndroidパッケージの内部を走査する。 public static void forEachDexFile(final DexFile dexFile) { final String targetPackage = handler.getContext().getPackageName(); final Enumerat
今日、自宅のPCでAndroidプロジェクトを実行しようとすると、以下のエラーが発生した。 Error generating final archive: Debug Certificate expired on 10/11/24 16:45 これが噂には聞いていたdebug.keystoreの有効期限切れだ。私がAndroidのSDKを使い始めて1年経ったということなのだ。 E:\android\keystore>keytool -v -list -keystore debug.keystore キーストアのパスワードを入力してください: キーストアのタイプ: JKS キーストアのプロバイダ: SUN キーストアには 1 エントリが含まれます。 別名: androiddebugkey 作成日: 2009/11/24 エントリタイプ: PrivateKeyEntry 証明連鎖の長さ: 1
Androidの開発者がよくするミスのNo.2位に、INTERNETパーミションの付加忘れがある。(No.1はActivity要素の記述漏れに違いない) 上記のパーミションが無いままインターネットにアクセス(IPアドレス取得やDNSアクセスでも発生)することが原因で発生する例外のはずだが、 ERROR/AndroidRuntime(258): Caused by: java.net.UnknownHostException: f.hatena.ne.jp ERROR/AndroidRuntime(258): at java.net.InetAddress.lookupHostByName(InetAddress.java:513) ERROR/AndroidRuntime(258): at java.net.InetAddress.getAllByNameImpl(InetAddress.
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く