tag:blogger.com,1999:blog-88859835626900931392024-03-13T11:07:25.759+09:00いつはどっとねっとdmphttp://www.blogger.com/profile/02653849742863649730noreply@blogger.comBlogger6125tag:blogger.com,1999:blog-8885983562690093139.post-14088696846615760242013-11-20T23:31:00.000+09:002013-11-20T23:31:50.817+09:00[Android 4.4] Private browsing is not supported in WebView.<p>
targetSdkVersion が 19 (Android 4.4 KitKat) 以上のとき、<a href="http://developer.android.com/reference/android/webkit/WebView.html#WebView(android.content.Context, android.util.AttributeSet, int, boolean)" target="_blank">WebView(Context context, AttributeSet attrs, int defStyle, boolean privateBrowsing)</a> で WebView のインスタンスを作成すると次の例外が起きてクラッシュする。
</p>
<pre class="prettyprint"><code>java.lang.IllegalArgumentException: Private browsing is not supported in WebView.
at com.android.webview.chromium.WebViewChromium.init(WebViewChromium.java:203)
at android.webkit.WebView.<init>(WebView.java:508)
at android.webkit.WebView.<init>(WebView.java:475)</init></init></code></pre>
<p>
この振る舞いは、クラスリファレンス <a href="http://developer.android.com/reference/android/webkit/WebView.html" target="_blank">WebView | Android Developers</a> にも移行ガイド <a href="http://developer.android.com/guide/webapps/migrating.html" target="_blank">Migrating to WebView in Android 4.4 | Android Developers</a> にも書かれていないので注意が必要。
</p>
<pre class="prettyprint"><code>
public void init(final Map<String, Object> javaScriptInterfaces,
final boolean privateBrowsing) {
if (privateBrowsing) {
mFactory.startYourEngines(true);
final String msg = "Private browsing is not supported in WebView.";
if (mAppTargetSdkVersion >= Build.VERSION_CODES.KITKAT) {
throw new IllegalArgumentException(msg);
} else {
...
</code></pre>
<a href="https://android.googlesource.com/platform/frameworks/webview/+/android-4.4_r1.1/chromium/java/com/android/webview/chromium/WebViewChromium.java">https://android.googlesource.com/platform/frameworks/webview/+/android-4.4_r1.1/chromium/java/com/android/webview/chromium/WebViewChromium.java</a> より
<p>WebView のコンストラクタから呼ばれる init メソッドの実装を見る限り、<code>targetSdkVersion >= Build.VERSION_CODES.KITKAT</code> のときでもプライベートブラウジングを利用するのは不可能にみえる。</p>
dmphttp://www.blogger.com/profile/02653849742863649730noreply@blogger.com0tag:blogger.com,1999:blog-8885983562690093139.post-14415588046179020862013-07-20T12:13:00.000+09:002013-07-20T12:13:51.307+09:00iPhone 5 の nano SIM を HTL22 で使う<p>
<a href="http://www.amazon.co.jp/gp/product/B007A933GM/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B007A933GM&linkCode=as2&tag=dmp-22">UBEST製 マイクロSIMアダプタ</a> が届いたので、試してみた。
</p>
<p>
<a href="http://1.bp.blogspot.com/-IXFPX4GM0HM/Uen7MMkwoCI/AAAAAAAAKm4/M0HbQJYUlQo/s1600/2013-07-20+11.20.27.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://1.bp.blogspot.com/-IXFPX4GM0HM/Uen7MMkwoCI/AAAAAAAAKm4/M0HbQJYUlQo/s320/2013-07-20+11.20.27.jpg" width="240" /></a><br />
パッケージはとても簡素。中に細かいゴミが入っていたが別に支障はない。
</p>
<p>
<a href="http://3.bp.blogspot.com/-IU93pUdjMys/Uen7MLke3rI/AAAAAAAAKnA/fTwumanXKzU/s1600/2013-07-20+11.22.14.jpg" imageanchor="1" ><img border="0" src="http://3.bp.blogspot.com/-IU93pUdjMys/Uen7MLke3rI/AAAAAAAAKnA/fTwumanXKzU/s320/2013-07-20+11.22.14.jpg" /></a><br />
同梱のピンで iPhone 5 の SIM トレイを外せた
</p>
<p>
<a href="http://1.bp.blogspot.com/-OPMQMveS8Bk/Uen7MSdaxKI/AAAAAAAAKm8/px99suUTE3g/s1600/2013-07-20+11.24.10.jpg" imageanchor="1" ><img border="0" src="http://1.bp.blogspot.com/-OPMQMveS8Bk/Uen7MSdaxKI/AAAAAAAAKm8/px99suUTE3g/s320/2013-07-20+11.24.10.jpg" /></a><br />
取り外した nano SIM を nano-micro SIM アダプタに差し込み。粘着シートがアダプタに取り付け済みのタイプなので、シールを追加で貼る必要はない。
</p>
<p>
<a href="http://2.bp.blogspot.com/-vPp_bLyYG7U/Uen7NaZl2lI/AAAAAAAAKnQ/wOGbDoYA1gE/s1600/2013-07-20+11.30.52.png" imageanchor="1" ><img border="0" src="http://2.bp.blogspot.com/-vPp_bLyYG7U/Uen7NaZl2lI/AAAAAAAAKnQ/wOGbDoYA1gE/s320/2013-07-20+11.30.52.png" /></a><br />
アダプタを挿入して HTL22 を起動し、 speedtest を実行したところ。 PING 43ms, DL 42Mbps, UL 16Mbps と非常に快適。入れ方が悪かったのか、<strong>一度目では HTL22 が SIM を認識しなかった。</strong>出し入れしたところ解決した。
</p>
<iframe src="http://rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=dmp-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=B007A933GM" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>
dmphttp://www.blogger.com/profile/02653849742863649730noreply@blogger.com1tag:blogger.com,1999:blog-8885983562690093139.post-89895824998767147052012-12-30T16:15:00.001+09:002012-12-30T16:16:26.491+09:00adb backup/resore を使う <p>Android 4.0 (ICS) で導入された adb backup/restore を使うとデバイスの移行が便利なので、まとめておく。</p>
<p><strong>環境構築</strong></p>
<p><a class="reference external" href="http://www.nttdocomo.co.jp/service/developer/smart_phone/technical_info/startguide/sdk/index.html">Android SDKのインストール | サービス・機能 | NTTドコモ</a> を参照し、 Android SDK をインストールする。
途中、 "8.「Android SDK Tools Setup」というダイアログに続いて「Choose Packages to Install」というダイアログが表示されます。" において次の2つのみインストールする。</p>
<ul class="simple">
<li>Android SDK Tools</li>
<li>Android SDK Platform-tools</li>
</ul>
<p><strong>同じ機種に移行する場合</strong></p>
<p>ケータイ補償 お届けサービスなどを利用した場合に便利。</p>
<p>バックアップ:</p>
<pre class="literal-block">
$ adb backup -f <任意の名前>.ab -apk -shared -all -system
</pre>
<ul class="simple">
<li>-apk: apk ファイルをバックアップに含める</li>
<li>-shared: 共有ストレージ/SDカードをバックアップに含める</li>
<li>-all: すべてのアプリをバックアップに含める</li>
<li>-system: プリインストールのアプリをバックアップに含める<ul>
<li>デフォルトは -system なので省略可能</li>
</ul>
</li>
</ul>
<p>リストア:</p>
<pre class="literal-block">
$ adb restore <任意の名前>.ab
</pre>
<p><strong>違う機種に移行する場合</strong></p>
<p>新しい機種に移る場合に便利。</p>
<p>バックアップ:</p>
<pre class="literal-block">
$ adb backup -f <任意の名前>.ab -apk -shared -all -nosystem
</pre>
<ul class="simple">
<li>-apk: apk ファイルをバックアップに含める</li>
<li>-shared: 共有ストレージ/SDカードをバックアップに含める</li>
<li>-all: すべてのアプリをバックアップに含める</li>
<li>-nosystem: プリインストールのアプリをバックアップしない</li>
</ul>
<p>リストアは同様のため省略。</p>dmphttp://www.blogger.com/profile/02653849742863649730noreply@blogger.com0tag:blogger.com,1999:blog-8885983562690093139.post-10577114066696038142012-08-18T13:39:00.000+09:002012-08-18T13:43:51.576+09:00pfn/android-sdk-pluginでAndroidのScala開発環境を構築(2) pfn/android-sdk-pluginでAndroidのScala開発環境を構築(2)
Android, Eclipse, Scala, Ubuntu,
<div class="document" id="pfn-android-sdk-pluginandroidscala-2">
<p>概要は <a class="reference external" href="http://blog.itsuha.net/2012/08/pfnandroid-sdk-pluginandroidscala.html">pfn/android-sdk-pluginでAndroidのScala開発環境を構築</a> を参照。</p>
<p><strong>プロジェクトの作成</strong></p>
<pre class="literal-block prettyprint"><code>$ android create project --target android-16 --path ./chokinbo --package net.itsuha.chokinbo --activity MainActivity</code>
</pre>
<p><strong>pfn/android-sdk-plugin の設定</strong></p>
<pre class="literal-block prettyprint"><code>$ mkdir project
$ cat << END > project/plugin.sbt
resolvers += Resolver.url("scala-sbt releases", new URL(
"http://scalasbt.artifactoryonline.com/scalasbt/sbt-plugin-releases/"))(
Resolver.ivyStylePatterns)
addSbtPlugin("com.hanhuy.sbt" % "android-sdk-plugin" % "0.3.6")
END
$ cat << END > project/build.properties
sbt.version=0.11.2
END
$ cat << END > build.sbt
name := "Chokinbo"
seq(androidBuildSettings: _*)
END</code></pre>
<p>build.sbtはprojectディレクトリではなく、プロジェクトルート直下なので注意。</p>
<p><strong>Javaソースのみでsbtを実行し、実機にインストールできることを確認</strong></p>
<pre class="literal-block prettyprint"><code>$ sbt
> android:run</code></pre>
<p><strong>Scalaソースの追加、実行</strong></p>
<pre class="literal-block prettyprint"><code>$ rm src/net/itsuha/chokinbo/MainActivity.java
$ cat << END > src/net/itsuha/chokinbo/MainActivity.scala
package net.itsuha.chokinbo
import _root_.android.app.Activity
import _root_.android.os.Bundle
class MainActivity extends Activity {
override def onCreate(bundle: Bundle) {
super.onCreate(bundle)
setContentView(R.layout.main)
}
}
END
$ sbt
> android:run</code></pre>
<p>Javaの場合と異なり、自動でProguardが実行される。</p>
</div>
dmphttp://www.blogger.com/profile/02653849742863649730noreply@blogger.com0tag:blogger.com,1999:blog-8885983562690093139.post-44497947572767130982012-08-17T08:33:00.001+09:002012-08-18T13:41:53.190+09:00pfn/android-sdk-pluginでAndroidのScala開発環境を構築<div class="section" id="pfn-android-sdk-plugin">
<h4><a class="reference external" href="https://github.com/pfn/android-sdk-plugin">pfn/android-sdk-plugin</a> とは</h4>
<p><a class="reference external" href="https://github.com/jberkel/android-sdk-plugin">jberkel/android-plugin</a> のfork。以下にREADMEの和訳と試してみた時に引っかかった点などを書いてみる。</p>
<p><strong>jberkel/android-plugin との違い</strong></p>
<ul class="simple">
<li>jberkel/android-plugin は使うのが非常に難しいようだ</li>
<li>設定のしやすさが pfn/android-sdk-plugin の主な目的</li>
<li>4行の設定と、あとはAndroid標準のプロジェクトレイアウト</li>
</ul>
<table border="1" class="docutils">
<colgroup>
<col width="24%" />
<col width="76%" />
</colgroup>
<thead valign="bottom">
<tr><th class="head">コマンド</th>
<th class="head">説明</th>
</tr>
</thead>
<tbody valign="top">
<tr><td>android:devices</td>
<td>デバイス一覧を表示</td>
</tr>
<tr><td>android:device</td>
<td>以後のコマンドの対象デバイスを選択
選択されない場合、リストの最初のデバイスが対象になる</td>
</tr>
<tr><td>android:install</td>
<td>apkのビルドとインストール</td>
</tr>
<tr><td>android:run</td>
<td>apkのビルドとインストール、実行</td>
</tr>
</tbody>
</table>
<ul class="simple">
<li>Eclipseや <em>android create project</em> で作成されたプロジェクトレイアウト
を利用</li>
<li>既存の .properties をすべて読み込む</li>
<li>jberkel/android-plugin にはあった TR は pfn/android-plugin には存在しない</li>
<li>apklib サポートはなし</li>
</ul>
<p>詳細は <a class="reference external" href="https://groups.google.com/forum/#!topic/scala-on-android/LK1PtWOsRQ8">New android sbt plugin (works with stock android projects and basic scala projects) - Google Groups</a> および <a class="reference external" href="https://github.com/pfn/android-sdk-plugin">pfn/android-sdk-plugin</a> を参照。</p>
<p><strong>使い方</strong></p>
<ol class="arabic simple">
<li><a class="reference external" href="https://github.com/harrah/xsbt">sbt</a> をインストール</li>
<li><em>android create project</em> またはEclipseで新しいプロジェクトを作成。<ul>
<li>古いプロジェクトやEclipseでプロジェクトを作成した場合は <em>android update project -p .</em> を実行することをおすすめ。参考: <a class="reference external" href="https://github.com/pfn/android-sdk-plugin/issues/3">https://github.com/pfn/android-sdk-plugin/issues/3</a></li>
</ul>
</li>
<li>project/plugin.sbt を作成し、以下の内容を記載する</li>
</ol>
<pre class="literal-block prettyprint"><code>resolvers += Resolver.url("scala-sbt releases", new URL(
"http://scalasbt.artifactoryonline.com/scalasbt/sbt-plugin-releases/"))(
Resolver.ivyStylePatterns)
addSbtPlugin("com.hanhuy.sbt" % "android-sdk-plugin" % "0.3.6") </code></pre>
<ol class="arabic simple" start="4">
<li>build.sbt を作成し、以下の内容を記載する</li>
</ol>
<pre class="literal-block prettyprint"><code>name := YOUR-PROJECT-NAME
seq(androidBuildSettings: _*)</code></pre>
<ol class="arabic simple" start="5">
<li>sbtを実行。利用できるコマンドには例えば次のものがある</li>
</ol>
<table border="1" class="docutils">
<colgroup>
<col width="25%" />
<col width="75%" />
</colgroup>
<thead valign="bottom">
<tr><th class="head">コマンド</th>
<th class="head">説明</th>
</tr>
</thead>
<tbody valign="top">
<tr><td>compile</td>
<td>JavaとScalaの全ソースをコンパイル
Scalaの場合は自動でProguardにより処理され、そうでなければ手動で有効にできる</td>
</tr>
<tr><td>android:package-release</td>
<td>apkをビルドしてリリースキーで署名(設定済みならば)</td>
</tr>
<tr><td>android:package-debug</td>
<td>apkをビルドしてデバッグキーで署名</td>
</tr>
<tr><td>android:package</td>
<td>package-release または package-debug のどちらか。デフォルトはdebug</td>
</tr>
</tbody>
</table>
<ol class="arabic simple" start="6">
<li>package-release で署名をしたい場合は、次の各設定を <em>local.properties</em> などに記述する</li>
</ol>
<pre class="literal-block prettyprint"><code>key.alias: YOUR-KEY-ALIAS
key.store: /path/to/your/.keystore
key.store.password: YOUR-KEY-PASSWORD
key.store.type: pkcs12 (optional, defaults to jks)</code></pre>
</div>
<div class="section" id="id2">
<h4>使ってみた感想</h4>
<ul class="simple">
<li>project.properties, local.properties他を読み込んでくれるので、設定作業が楽</li>
<li>jberkel/android-plugin では、 android.support.v4.app.Fragment を継承したクラスがProguardの設定をしてもkeepされず、ClassNotFoundException を吐き続けていつまでも実行できなかったのに対し、pfn/android-sdk-plugin では簡単に通過</li>
<li>これから実際に開発で使ってみる</li>
</ul>
<p>続編: <a href="http://blog.itsuha.net/2012/08/pfnandroid-sdk-pluginandroidscala2.html">pfn/android-sdk-pluginでAndroidのScala開発環境を構築(2)</a></p>
</div>
dmphttp://www.blogger.com/profile/02653849742863649730noreply@blogger.com0tag:blogger.com,1999:blog-8885983562690093139.post-40678569325917609012012-03-20T23:50:00.000+09:002012-08-18T11:48:37.659+09:00Scala, Android, Eclipse, Ubuntu 11.10 開発環境の構築<h4 id="環境">環境</h4>
<ul>
<li>Ubuntu 11.10 32bit</li>
</ul>
<p>インストールしたものは次の通り。</p>
<ul>
<li>Android SDK r16</li>
<li>sun-java6</li>
<li>sbt 0.11.2</li>
<li>conscript</li>
<li>giter8</li>
<li>sbt-android-plugin(自動)</li>
<li>Eclipse Indigo 3.7.2
<ul>
<li>Scala IDE 2.0.0</li>
<li>ADT r16</li>
</ul></li>
<li>sbteclipse</li>
</ul>
<h4 id="android-sdk">Android SDK</h4>
<p><a href="http://developer.android.com/sdk/index.html">Android SDK | Android Developers</a>を参考にいつもの手順。</p>
<pre class="prettyprint"><code>$ wget http://dl.google.com/android/android-sdk_r16-linux.tgz
$ tar xzf android-sdk_r16-linux.tgz
$ mv android-sdk-linux /opt
$ vim ~/.zshrc
export ANDROID_SDK_HOME=/opt/android-sdk-linux
export ANDROID_HOME=/opt/android-sdk-linux
export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools
$ android</code></pre>
<p>SDK Managerが起動するのでSDK Tools, SDK Platform-tools, SDK Platform, Support packageなど必要なものをインストール</p>
<h4 id="sun-java6">sun-java6</h4>
<p><a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">Java SE Downloads</a></p>
<p>後々、Eclipseで.scalaファイルを開いたらEclipseがクラッシュするという不具合に遭遇したけどOpenJDKからsun-java6に変えたら消えたので必須かも。</p>
<pre class="prettyprint"><code>$ ./jdk-6u31-linux-i586.bin
$ sudo mkdir /usr/local/java
$ sudo mv jdk1.6.0_31 /usr/local/java
$ cd /usr/local/java
$ sudo ln -s jdk1.6.0_31 jdk
$ sudo ln -s jdk/jre jre
$ vim ~/.zshrc
export JAVA_HOME=/usr/local/java/jdk
export JRE_HOME=/usr/local/java/jre
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
$ source ~/.zshrc</code></pre>
<h4 id="sbt-0.11.2">sbt 0.11.2</h4>
<p>sbt 0.12が出ているみたいだけど安牌と思われる0.11.2を選択。 <a href="http://typesafe.artifactoryonline.com/typesafe/ivy-releases/org.scala-tools.sbt/sbt-launch/0.11.2/sbt-launch.jar">sbt-launch.jar</a>とその起動スクリプトを準備する。</p>
<blockquote>
<p>Download sbt-launch.jar and place it in ~/bin.</p>
<p>Create a script to run the jar, by placing this in a file called sbt in your ~/bin directory:</p>
<pre class="prettyprint"><code>java -Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=384M -jar `dirname $0`/sbt-launch.jar "$@"</code></pre>
<p>Make the script executable:</p>
<pre class="prettyprint"><code>$ chmod u+x ~/bin/sbt</code></pre>
<p><a href="https://github.com/harrah/xsbt/wiki/Getting-Started-Setup"><code class="url">https://github.com/harrah/xsbt/wiki/Getting-Started-Setup</code></a></p>
</blockquote>
<h4 id="conscript-giter8">conscript, giter8</h4>
<p>プロジェクトテンプレート作成用に<a href="https://github.com/n8han/conscript">conscript</a>および<a href="https://github.com/n8han/giter8">giter8</a>をインストール。このテンプレートをsbtで開くと自動的に<a href="https://github.com/jberkel/android-plugin">android-plugin</a>がインストールされる。</p>
<pre class="prettyprint"><code>$ curl https://raw.github.com/n8han/conscript/master/setup.sh | sh
$ cs n8han/giter8
$ cd my/project/directory
$ g8 jberkel/android-app</code></pre>
<h4 id="eclipse">Eclipse</h4>
<p><a href="http://scala-ide.org/">Scala IDE 2.0.0</a>と<a href="http://developer.android.com/sdk/eclipse-adt.html">ADT Plugin for Eclipse</a>を<em>Install New Software...</em>する。</p>
<h4 id="sbteclipse">sbteclipse</h4>
<p><a href="http://scala-ide.org/docs/user/gettingstarted.html">Getting Started — Scala IDE</a>の<em>Start from an existing SBT project</em>を参考にsbteclipseをインストールする。 /project/plugins.sbtへ次のようにaddSbtPluginを1行追加する。addSbtPluginの間は1行開けないとsbtがエラーを吐く。</p>
<pre class="prettyprint"><code>resolvers += Resolver.url("scalasbt snapshots", new URL("http://scalasbt.artifactoryonline.com/scalasbt/sbt-plugin-snapshots"))(Resolver.ivyStylePatterns)
addSbtPlugin("org.scala-sbt" % "sbt-android-plugin" % "0.6.1-SNAPSHOT")
addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "2.0.0")
$ sbt
> eclipse</code></pre>
<p>sbtを実行すると自動でsbteclipseをインストールする。sbt内でeclipseと打つとeclipse用のプロジェクトファイルを生成する。</p>
<h4 id="開発">開発</h4>
<blockquote>
<p>In Eclipse use the Import Wizard to import Existing Projects into Workspace <a href="https://github.com/typesafehub/sbteclipse"><code class="url">https://github.com/typesafehub/sbteclipse</code></a></p>
</blockquote>
<p>Eclipse上でコードを書き、sbtでビルドする。</p>
<h4 id="参考">参考</h4>
<ul>
<li><a href="http://d.hatena.ne.jp/nanjakkun/20120115/1326556098">ScalaでAndroid開発 sbt 0.11.2版 - なんじゃくにっき</a></li>
<li><a href="http://www.itpl.co.jp/ocaml-nagoya/index.php?%A5%CD%A5%BF%B5%AD%CF%BF%B8%CB%2FScala%2FAndroid%2Fsbt-0.11.2">ネタ記録庫/Scala/Android/sbt-0.11.2 - ocaml-nagoya</a></li>
</ul>dmphttp://www.blogger.com/profile/02653849742863649730noreply@blogger.com1