2013年11月20日水曜日

[Android 4.4] Private browsing is not supported in WebView.

targetSdkVersion が 19 (Android 4.4 KitKat) 以上のとき、WebView(Context context, AttributeSet attrs, int defStyle, boolean privateBrowsing) で WebView のインスタンスを作成すると次の例外が起きてクラッシュする。

java.lang.IllegalArgumentException: Private browsing is not supported in WebView.
 at com.android.webview.chromium.WebViewChromium.init(WebViewChromium.java:203)
 at android.webkit.WebView.(WebView.java:508)
 at android.webkit.WebView.(WebView.java:475)

この振る舞いは、クラスリファレンス WebView | Android Developers にも移行ガイド Migrating to WebView in Android 4.4 | Android Developers にも書かれていないので注意が必要。


    public void init(final Map 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 {
              ...
https://android.googlesource.com/platform/frameworks/webview/+/android-4.4_r1.1/chromium/java/com/android/webview/chromium/WebViewChromium.java より

WebView のコンストラクタから呼ばれる init メソッドの実装を見る限り、targetSdkVersion >= Build.VERSION_CODES.KITKAT のときでもプライベートブラウジングを利用するのは不可能にみえる。

2013年7月20日土曜日

iPhone 5 の nano SIM を HTL22 で使う

UBEST製 マイクロSIMアダプタ が届いたので、試してみた。


パッケージはとても簡素。中に細かいゴミが入っていたが別に支障はない。


同梱のピンで iPhone 5 の SIM トレイを外せた


取り外した nano SIM を nano-micro SIM アダプタに差し込み。粘着シートがアダプタに取り付け済みのタイプなので、シールを追加で貼る必要はない。


アダプタを挿入して HTL22 を起動し、 speedtest を実行したところ。 PING 43ms, DL 42Mbps, UL 16Mbps と非常に快適。入れ方が悪かったのか、一度目では HTL22 が SIM を認識しなかった。出し入れしたところ解決した。

2012年12月30日日曜日

adb backup/resore を使う

Android 4.0 (ICS) で導入された adb backup/restore を使うとデバイスの移行が便利なので、まとめておく。

環境構築

Android SDKのインストール | サービス・機能 | NTTドコモ を参照し、 Android SDK をインストールする。 途中、 "8.「Android SDK Tools Setup」というダイアログに続いて「Choose Packages to Install」というダイアログが表示されます。" において次の2つのみインストールする。

  • Android SDK Tools
  • Android SDK Platform-tools

同じ機種に移行する場合

ケータイ補償 お届けサービスなどを利用した場合に便利。

バックアップ:

$ adb backup -f <任意の名前>.ab -apk -shared -all -system
  • -apk: apk ファイルをバックアップに含める
  • -shared: 共有ストレージ/SDカードをバックアップに含める
  • -all: すべてのアプリをバックアップに含める
  • -system: プリインストールのアプリをバックアップに含める
    • デフォルトは -system なので省略可能

リストア:

$ adb restore <任意の名前>.ab

違う機種に移行する場合

新しい機種に移る場合に便利。

バックアップ:

$ adb backup -f <任意の名前>.ab -apk -shared -all -nosystem
  • -apk: apk ファイルをバックアップに含める
  • -shared: 共有ストレージ/SDカードをバックアップに含める
  • -all: すべてのアプリをバックアップに含める
  • -nosystem: プリインストールのアプリをバックアップしない

リストアは同様のため省略。

2012年8月18日土曜日

pfn/android-sdk-pluginでAndroidのScala開発環境を構築(2)

pfn/android-sdk-pluginでAndroidのScala開発環境を構築(2) Android, Eclipse, Scala, Ubuntu,

概要は pfn/android-sdk-pluginでAndroidのScala開発環境を構築 を参照。

プロジェクトの作成

$ android create project --target android-16 --path ./chokinbo --package net.itsuha.chokinbo --activity MainActivity

pfn/android-sdk-plugin の設定

$ 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

build.sbtはprojectディレクトリではなく、プロジェクトルート直下なので注意。

Javaソースのみでsbtを実行し、実機にインストールできることを確認

$ sbt
> android:run

Scalaソースの追加、実行

$ 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

Javaの場合と異なり、自動でProguardが実行される。

2012年8月17日金曜日

pfn/android-sdk-pluginでAndroidのScala開発環境を構築

pfn/android-sdk-plugin とは

jberkel/android-plugin のfork。以下にREADMEの和訳と試してみた時に引っかかった点などを書いてみる。

jberkel/android-plugin との違い

  • jberkel/android-plugin は使うのが非常に難しいようだ
  • 設定のしやすさが pfn/android-sdk-plugin の主な目的
  • 4行の設定と、あとはAndroid標準のプロジェクトレイアウト
コマンド 説明
android:devices デバイス一覧を表示
android:device 以後のコマンドの対象デバイスを選択 選択されない場合、リストの最初のデバイスが対象になる
android:install apkのビルドとインストール
android:run apkのビルドとインストール、実行
  • Eclipseや android create project で作成されたプロジェクトレイアウト を利用
  • 既存の .properties をすべて読み込む
  • jberkel/android-plugin にはあった TR は pfn/android-plugin には存在しない
  • apklib サポートはなし

詳細は New android sbt plugin (works with stock android projects and basic scala projects) - Google Groups および pfn/android-sdk-plugin を参照。

使い方

  1. sbt をインストール
  2. android create project またはEclipseで新しいプロジェクトを作成。
  3. 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") 
  1. build.sbt を作成し、以下の内容を記載する
name := YOUR-PROJECT-NAME

seq(androidBuildSettings: _*)
  1. sbtを実行。利用できるコマンドには例えば次のものがある
コマンド 説明
compile JavaとScalaの全ソースをコンパイル Scalaの場合は自動でProguardにより処理され、そうでなければ手動で有効にできる
android:package-release apkをビルドしてリリースキーで署名(設定済みならば)
android:package-debug apkをビルドしてデバッグキーで署名
android:package package-release または package-debug のどちらか。デフォルトはdebug
  1. package-release で署名をしたい場合は、次の各設定を local.properties などに記述する
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)

使ってみた感想

  • project.properties, local.properties他を読み込んでくれるので、設定作業が楽
  • jberkel/android-plugin では、 android.support.v4.app.Fragment を継承したクラスがProguardの設定をしてもkeepされず、ClassNotFoundException を吐き続けていつまでも実行できなかったのに対し、pfn/android-sdk-plugin では簡単に通過
  • これから実際に開発で使ってみる

続編: pfn/android-sdk-pluginでAndroidのScala開発環境を構築(2)

2012年3月20日火曜日

Scala, Android, Eclipse, Ubuntu 11.10 開発環境の構築

環境

  • Ubuntu 11.10 32bit

インストールしたものは次の通り。

  • Android SDK r16
  • sun-java6
  • sbt 0.11.2
  • conscript
  • giter8
  • sbt-android-plugin(自動)
  • Eclipse Indigo 3.7.2
    • Scala IDE 2.0.0
    • ADT r16
  • sbteclipse

Android SDK

Android SDK | Android Developersを参考にいつもの手順。

$ 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

SDK Managerが起動するのでSDK Tools, SDK Platform-tools, SDK Platform, Support packageなど必要なものをインストール

sun-java6

Java SE Downloads

後々、Eclipseで.scalaファイルを開いたらEclipseがクラッシュするという不具合に遭遇したけどOpenJDKからsun-java6に変えたら消えたので必須かも。

$ ./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

sbt 0.11.2

sbt 0.12が出ているみたいだけど安牌と思われる0.11.2を選択。 sbt-launch.jarとその起動スクリプトを準備する。

Download sbt-launch.jar and place it in ~/bin.

Create a script to run the jar, by placing this in a file called sbt in your ~/bin directory:

java -Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=384M -jar `dirname $0`/sbt-launch.jar "$@"

Make the script executable:

$ chmod u+x ~/bin/sbt

https://github.com/harrah/xsbt/wiki/Getting-Started-Setup

conscript, giter8

プロジェクトテンプレート作成用にconscriptおよびgiter8をインストール。このテンプレートをsbtで開くと自動的にandroid-pluginがインストールされる。

$ curl https://raw.github.com/n8han/conscript/master/setup.sh | sh
$ cs n8han/giter8
$ cd my/project/directory
$ g8 jberkel/android-app

Eclipse

Scala IDE 2.0.0ADT Plugin for EclipseInstall New Software...する。

sbteclipse

Getting Started — Scala IDEStart from an existing SBT projectを参考にsbteclipseをインストールする。 /project/plugins.sbtへ次のようにaddSbtPluginを1行追加する。addSbtPluginの間は1行開けないとsbtがエラーを吐く。

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

sbtを実行すると自動でsbteclipseをインストールする。sbt内でeclipseと打つとeclipse用のプロジェクトファイルを生成する。

開発

In Eclipse use the Import Wizard to import Existing Projects into Workspace https://github.com/typesafehub/sbteclipse

Eclipse上でコードを書き、sbtでビルドする。

参考