Cordova PowerManagementプラグインでCPUをスリープさせない

PowerManagementプラグインを使用するとモバイル端末の電源の状態を制御することができます。たとえば、動画や音楽アプリでスクリーンをオンのまま維持したり、目覚ましアプリでスクリーンがオフになってもCPUを稼働させ続けるといった使い方ができます。

PowerManager – Android Developers
Keep the device awake – Android Developers

Viras-/cordova-plugin-powermanagement
boltex/cordova-plugin-powermanagement

Note

Viras氏のプラグインはSCREEN_DIM_WAKE_LOCK、boltex氏のプラグインはPARTIAL_WAKE_LOCKを設定します。
目覚ましアプリのようにタイマーを動かし続けたい場合はboltex氏のプラグインを使うことになります。

// 開始ボタン
function start() {
  if (window.chrome && window.chrome.power) {
    chrome.power.requestKeepAwake("system");
  }
}
// キャンセルボタン
function stop() {
  if (window.chrome && window.chrome.power) {
    chrome.power.releaseKeepAwake();
  }
}

Cordova Emailプラグインでメールを送信

Emailプラグインを使用するとモバイル端末のメールアプリを立ち上げることができます。このとき送信メールの初期値として宛先(to, cc, bcc)、件名、本文、添付ファイルなどを設定できます。

katzer/cordova-plugin-email-composer

サンプル

cordova.plugins.email.isAvailable(function (hasAccount) {
  if (hasAccount) {
    cordova.plugins.email.open({
      to: "username@gmal.com",
      subject: "テストメール",
      body: "こんにちは!",
      isHtml: false
    });
  } else {
    ons.notification.alert({
      message: "There is no email client available."
    });
  }
});

実行結果

許可しないを選択

許可を選択


Note

EmailプラグインはGET_ACCOUNTSパーミッションを使用します。このパーミッションはDangerousパーミッションに属するため、Emailプラグインを使用するアプリではプライバシーポリシーを用意する必要があります。

システム パーミッション – Android Developers
プライバシー ポリシー – Play Consoleヘルプ

Monacaで作ったAPKのサイズ削減

先日メモ帳アプリ「Tiny Note」のアップデート版を作っていたときに実験的に必要なさそうなファイルを手当たり次第に消しまくってからビルドしてみたところ、APKファイルのサイズを削減することができました。
正直やっていいことなのかもよくわかっていないのですが、とりあえず書き留めておきます。

  • 開発環境:MonacaクラウドIDE
  • ビルドの種類:Android リリースビルド

サイズ削減効果

まず結果をご覧ください。

  • 一番上のファイルはCrosswalkプラグインを導入した現行版のAPKファイルです。Android4.xに対応するためとはいえシンプルなメモ帳が28MB…。
    Crosswalkプラグイン – Monaca Docs
  • 二番目のファイルは上述のAPKファイルからCrosswalkプラグインを外して作成したアップデート版のAPKファイルです。
    実際は機能追加やライブラリのバージョンアップなどが含まれています。
    「外した」というかアプリのプロジェクトを開いたら自動的に外れちゃったんですけどね。Monacaでは今年1月からCrosswalkプラグインのサポートを終了したそうです。私としてはもともと今回のアップデートで外したかったのでちょうどよかったです。
    MonacaがCordova 7.1に対応しました! – モナカプレス
    ちなみにCrosswalkプラグインを新たにインポートしてみたのですが、ビルド画面に移動するとエラーメッセージが表示されました。結局このエラーを解消できずビルドすることができませんでした。サポート終了というか使用禁止?
  • そして、三番目のファイルが今回サイズ削減を行ったAPKファイルです。二番目のファイルから約2.7MB減りました。50~100MBクラスのAPKファイルですとほとんど効果を感じられないと思いますが、このアプリくらいのサイズではなかなか効果的な改善に見えます。

APKファイルの中身を見てみる

前述の二番目のAPKファイルはMonacaクラウドIDEで普通にビルドして作成したもので、これまでと同様にこれを最終版にしようと考えていました。28MBを5MBにできたので十分です。ところがリリース前にGoogle Playでいろいろなメモ帳アプリを眺めていたところ、1MB程度のメモ帳アプリが何個もあることに気づきました。
何が違うんだろうという思いからAPKファイルの中身を調べてみることにしました。

以下はウィキペディアのAPK (ファイル形式)からの引用です。

APK (Android application package、アンドロイドアプリケーションパッケージ、エーピーケー )とは、Googleによって開発されたAndroid専用ソフトウェアパッケージのファイルフォーマットである。

JARファイルをベースとしたZIP形式で、アーカイブファイルの一種である。

なんでAAPじゃないのか一瞬気になりましたが、APPと間違えやすいからとか拡張子としてすでに使われているからとか拡張子って人の名前っぽいとか気にしてもきりがないので気にしないことにしました。

まずAPKはZIP形式のファイルということで、拡張子をzipに書き換え解凍してみます。

解凍してできたフォルダの中はこんな感じです。見慣れないファイルがたくさんあります。

assets/www/components/onsenui/cssフォルダまで移動してみます。ここでさすがに気づきました。あきらかに使われていないファイルがいると。

assets/www/components/onsenui/esmフォルダ内にもファイルがぎっしり。何のためのファイルかわからなかったのですが、調べてみると同じコードがonsenui.jsに記述されていました。ということはこれもいらなさそう。

このように実際にAPKファイルの中身を見たことで、これらの必要なさそうなファイルを消してみたくなりました。たくさんあるので消し甲斐がありそうです。

不要なファイルを削除

MonacaクラウドIDEでプロジェクトを開き、ファイル名を検索して使用されていないことを確認しながら一つ一つ削除していきます。

ファイル削除前

ファイル削除後

比べてみるとだいぶすっきりした感じがします。onsenui-core.cssなど名前的に消しにくい雰囲気のファイルも消しましたし、上述の画像で見えていないフォルダ内のファイルも消しています。

また、ファイル削除に伴い一か所だけファイルを修正しました。assets/www/components/onsenui/css/onsenui.min.cssの一行目、というかminifyされているので一行しかありませんが、そのほぼ先頭に書かれているionicons.min.cssとmaterial-design-iconic-font.min.cssのimport文を削除しました。

このファイル構成でビルドすることで約2.7MB削減することができました。

ちなみに私の場合、なにやらファイルを消しすぎたみたいでMonacaクラウドIDEのプロジェクトのアイコンまで消えてしまいました。

不穏な空気をまとっていますがIDE上のコンソールエラーなどもなく、とりあえず使用上問題なさそうです。

まとめ

このAPKファイル(Tiny Noteアップデート版)は無事にリリースすることができました。ちょっと手間がかかりますし余計なリスクも発生しますが、アプリのサイズを気にされている方は試してみてはいかがでしょうか。ただしファイルの削除は慎重に、そして自己責任でお願いします。

おまけ

この記事を書くためにネットでいろいろ調べていたら、APKサイズを削減するためのちゃんとした情報を2つ見つけました。

どちらも私にはちょっとハードルが高そうなので、もし今回リリースする前にこれらの情報を見つけたとしても手は出さなかったと思います。わかる方は試してみてはいかがでしょうか。私はこどもでもわかるやさしい解説記事を見つけたらやってみようと思います。