2015年5月31日日曜日

Android Chromium バージョン

Crosswalkを使用しない場合、Android4.x,5.xのWebViewのChromiumのバージョンに多少注意の必要がある。

4.4.0 - 4.4.2

Chromium 30

4.4.3 - 4.4.4

Chromium 33

5.x

Chromium37以上 独立apkによってバージョンがアップデートされるため固定ではない。

Crosswalk

ビルド時に使用したCrosswalkのバージョンによって異なる。基本的にほぼ最新。

2015年5月29日金曜日

BeginFrameOnMainThread skip becuase no gl

Cordova5(Cordova Android 4.0.2)でcanvasを表示すると「skip becuase no gl」とログに出力されてフリーズします。

Cordova Android 3.7.2に戻すと正常に動きます。

分かっている事はスマホの高い解像度に対応するために大きなキャンバスを作成して小さく表示した場合にフリーズします。 canvas.width,canvas.heightを解像度に合わせて2倍の大きさで作成してcanvas.style.width,canvas.style.heightとした場合などがそれにあたります。 ライブラリでscaleが提供されている場合は実質は同じ処理をしているので落ちます。

Crosswalk(Chromium42)だとフリーズしませんでした。表に表すと以下のような状況です。

Cordova Android Crosswalk 結果
3.7.2 正常
4.0.2 フリーズ
4.0.2 使用 正常

Cordova Android に脆弱性(CVE-2015-1835)の対応

CVE-2015-1835への対応
https://cordova.apache.org/announcements/2015/05/26/android-402.html

cordova platform add android@4.0.2
又は
cordova platform update android@4.0.2

普通にadd,updateすると4.0.0がまだ入るようなのでバージョンを明示する必要有り。
6/11にリリースされたCordova5.1.1からは4.0.2が入るようになりました。
3.7系を使用している場合は3.7.2を指定する。

2015年5月26日火曜日

crosswalk版と通常版の2つのAPKを公開

Crosswalkはサイズが大きく、なぜか4.4ではcrosswalkの方が遅いので、複数のAPKを同時に公開する方法を調べました。実際に2種類公開してみて、公開手順は簡単で特にひっかかることはありませんでした。

やりたい事

  • 4.0-4.3の端末ではcrosswalkのapkをダウンロード
  • 4.4- ではcrosswalkなしのapkをダウンロード

Multiple APK

Multiple APK Support
Multiple APK Support - 日本語訳

  • 「アドバンスドモード」にすると複数APKサポートに切り替わる
  • 端末が複数のAPKの条件にマッチした場合はバージョンコードが高い方がインストールされる
config.xmlでminSDKVersionをコントロールする。maxSDKVersionを設定するとユーザが端末を変えてrestoreをした際に困る事になるので使わない。

通常のAPK
<widget version="1.0.0" android-versionCode="19100">
<preference name="android-minSdkVersion" value="19"/>

Crosswalk版のAPK
<widget version="1.0.0" android-versionCode="14100">
<preference name="android-minSdkVersion" value="14"/>

バージョンコードの変更方法

通常はconfig.xmlのwidgetタグのversionがバージョンコードにも反映される。
1.0.5 -> 10005
自分でバージョンコードのみ変える場合は
同じくwidgetタグにandroid-versionCodeで指定する。

アドバンスドモードから通常モードに戻す

例えばCrosswalkに統一する場合などに複数のAPKの公開を解除したい場合がありました。
公開APKを1つの状態にして「アドバンスドモード」を解除すると通常の1つ公開している状態に戻りました。

困った事

ユーザさんからのレビューでバージョンコードではなく外に表示用のバージョン(1.0.1など)が表示されるため、同じ1.0.1でもどちらのAPKについて書かれているのか判断ができませんでした。

Android4.4 Cordova Crosswalk動作検証


Crosswalkに関係なくChromeのバージョンが上がった結果、js自体かWebフレーム「OnsenUI」の動作が変わったためにガタついて見えるようです。
Crosswalkの問題ではなくChromeのバージョンの問題の可能性があります。

Cordova5でsigned apkが生成されなくなったら

ant.propetiesにkey storeを記載していた場合は Cordova5になって(?) antからGradleになったそうなので 署名ができずに署名無しapkのみ生成されるようになってしまいました。

修正方法


  • ant.properties を  release-signing.properties に変更する
  • storeFile keyAlias storePassword keyPassword  とパラメータ名を変更する


Cordova5でCrosswalk導入

Cordova5(Cordova Android4.0)を使用すると簡単に導入できました。

Crosswalkインストール手順



  1. cordova plugin add cordova-plugin-crosswalk-webview --save
  2. cordova platform rm android
  3. cordova platform add android
  4. cordova plugin list
    1. cordova-plugin-crosswalk-webview 1.4.0 "Crosswalk WebView Engine”がでてくる
  5. cordova build android
    1. crosswalkに必要なファイルがダウンロードされる。(時間がかかる)
  6. 以降はcrosswalkが含まれてビルドされる。アプリのサイズを見ると一目瞭然に。
  7. ビルドでサイズの大きなapkがたくさんできてしまうので、PlayStoreへapkのアップロードが終ったら、「cordova clean」コマンドで綺麗にするようにしています。

使えなくなったプラグイン

一部動かなくなったものもありましたが、Crosswalkには関係なくCordova Android4.0に上げたのが原因でした。

サイズの増加

  • APKサイズ 5.3MB -> 24.5MB
  • 端末メモリサイズ 10MB -> 64MB
端末メモリサイズはTwitter25MB Facebook40MBを考えるととても大きい。
いくつかの機能を省いてサイズを半分にするCrosswalk Liteという派生プロジェクトもあるのでこちらも試してみたいです。(Crosswalkのサイズが半分になるLiteについて)
また、Air SDKのようにランタイムを共有するSharedモードもあるようですが個人的には一般ユーザ向けの導入には期待しておりません。

動作の感覚

  • Android4.4ではcrosswalkを入れた方が重く感じる(参照動作検証)

アプリの起動

  • Crosswalkの方が遅いですが最近の端末はメモリが大きいので最初だけと思えば問題はないです

ビルド時の問題

  • 指定したandroid-versionCodeが無視されて違う値が設定されました。(crosswalkではなくビルドツールの方の問題?)
  • 問題ではありませんがArmとx862つapkが生成されますので、両方対応する方はまとめる必要があります。Android4以上のArm対応端末は8000, x86は200ぐらいのようです。

トラブルシューティング

  • cordova build androidが終了しない 
    • ウィルス対策をソフトを一時的に切ってみる

リリース後の問題

  • Crosswalkなしのバージョンでは一度もクラッシュレポートがありませんでしたがCrosswalkを使ったアプリでは起動時にクラッシュするケースがありました。(深く追ってないので断定はできません)