Cordova Androidでエミュレータにビルドできない件

こんばんわ!!cowboyです☆

今回はプログラミングのcordovaについて。

今年の4月にAndroid SDK Toolsのバージョンが25.3.1になってから、Googleが "android avd"と"android sdk"のコマンドを無効にしました。
さらにスタンドアローンのAndroid SDK manager、AVD managerがなくなり、Android Studioでの管理となりました。つまりAndroid Studioのインストールは必須です。
フォルダ構成等にも変更があったようで、cordovaから直接Androidエミュレータへのビルドができなくなっていました。


一応、cordova-androidプロジェクトフォルダ内のgradleを読み込んでAndroid Studioからエミュレータにビルドしたり、Androidエミュレータを既に起動している状態から"cordova emulate android"コマンド実行でエミュレータにビルドできるのですが、いちいちめんどくさかった。
海外の掲示板とか覗いても同じことで多くの人が悩んでいて、解決策としては、バージョンの古いAndroid SDK Toolsに戻す方法がベストアンサーとなっていました。


もちろんcordovaサイドもバージョンアップしてそれらの変更に対応していると公式でアナウンスされているのですが、なぜか"cordova emulate android"のコマンドでエラーを吐いてしまう。
これは僕の開発環境の問題かと思っていました(海外の掲示板によると全く同じ症状の人がたくさんいたけれども)。

そんな中、5/4にcordovaのメジャーアップデータであるcordova7.0が公開されました。それとともにcordova androidが6.2.3に更新されました。
そのアナウンスの中の一文に驚愕しました。以下引用です(リンク)。

"We are happy to announce that Cordova Android 6.2.3 has been released!
This patch release actually adds support for the Android SDK Tools v26 and newer.
Unfortunately, we forgot to include these changes in the 6.2.2 release.

Cordova Android 6.2.3をリリースできて嬉しいよ!
このパッチはAndroid SDK Tools v26以上を本当にサポートするようになったよ。
残念なことに、6.2.2リリースの際にはこれらの変更を含めるのを忘れちゃったんだ。"



・・・マジか!!アナウンスではビシッと対応をうたっていたのに、まさかのcordova側の対応忘れとは。。。(笑)

というわけで今あるプロジェクトを以下のコマンドでcordova androidを更新しましょう(@6.2.3をわざわざ付けないと何故か6.2.2が適応されてしまう)。

cordova platform update android@6.2.3
(新しくプロジェクトを作る場合はcordova platform add android@6.2.3)

しかしここでまた1つ問題が。
MacOS Sierraだとcordova emulate androidを行うときちんとAndroidエミュレータが立ち上がり、アプリがビルドされたのですが、Windows10だと次のようなエラーが出ました。

"Gradle: not installed
Could not find an installed version of Gradle either in Android Studio,
or on your system to install the gradle wrapper. Please include gradle
in your path, or install Android Studio"


どうやらAndroid SDK Tools v25.3.1以降ではGradleのパスが変わっているようです。
Macではなぜか特に何もしなくても大丈夫でした。とりあえずWindows10でパスを追加しましょう。

[コントロールパネル] - [システム] - [システムの詳細設定]メニューで表示される[システムのプロパティ]ダイアログボックスの[詳細設定]タブを開く。
環境変数をクリックすると、環境変数のダイアログボックスが表示されるので、[(ユーザーアカウント)のユーザー環境変数]内の[新規]ボタンをクリックして以下の内容を登録する。
(画像ではパスは既に追加済みです。)
cordova環境変数



変数名:GRADLE_HOME
変数値:Android Studioまでのパス¥gradle

Android Studioまでのパスは各自書き換えて下さい。
コマンドプロントで"gradle -version"を実行してgradleのバージョンが表示されればOKです。

これでWindows10でも"cordova emulate android"コマンドでAndroidエミュレータに直接ビルドできるはずです。
やっぱり新しい機能が追加されていたり、バグやセキュリティ面を考えると最新版を使っている方が安心できます(^^)
もちろん、最新バージョンで不具合が増えていることもありますが(笑)

以上cowboyでした☆うぇいうぇいうぇい!!

記事が良かったなら↓をクリックして応援願いますm(_ _)m








2017年度 大阪造幣局 桜の通り抜け

こんばんわ!!cowboyです☆

少し時期が過ぎてしまいましたが、先日大阪造幣局の桜の通り抜けに行ってきました(^^)
今年の桜の通り抜けは4/11~4/17の7日間行われました。
多分十何年ぶりです(^_^;)
ちなみに造幣局では紙幣の製造はしておらず、硬貨のみの製造とのことです。

今回は買ってから使い所を見つけられなかったこの望遠レンズを持参(ボディはOLYMPUS笑)して行きました。
予想通りいい感じに撮れました☆




写真 2017-04-16 12 18 05


写真 2017-04-16 12 21 27


写真 2017-04-16 12 15 20


ふと足元を見ると、たんぽぽも綺麗に咲いていました。


写真 2017-04-16 12 13 45


写真 2017-04-16 12 28 56


おやおや、花より団子ですか?


写真 2017-04-16 12 28 30




桜ってあまり詳しくないんですが、かなりたくさんの品種があってびっくりしました。
造幣局公式サイトによると、今年なんと134種350本の桜が待ち構えていたとのこと。


ただ日曜日だったので人もかなり多かった。疲れて途中の出口から出ちゃいました(^_^;)
今年の入場者は7日間合計で731,120人とのこと。
そう考えると1999年夏のGLAY20万人ライブ(こちらはなんと一日で)は異常だったんだなと何故か思いました(笑)


おまけ

帰り道、駐車していた車のオブジェ。

写真 2017-04-16 12 38 46

以上cowboyでした!
うぇいうぇい☆

記事が良かったなら↓をクリックして応援願いますm(_ _)m


cowboy、滋賀に立つ

こんばんわ!cowboyです☆

さて、最近都会ではいつも以上に人が多く息苦しいので、滋賀の近江八幡に行ってきました!!

日帰りだったので八幡堀の周りでゆっくりと散歩しましたよ!

OI000013.jpg

区画整理された町並み、琵琶湖につながる水路。
これはなかなかの権力を持ったものが統治していたのだろうと思って調べてみたら、豊臣秀吉の甥である豊臣秀次が天正13年(1585年)に八幡山に城を築き開町したとのこと。
しかしながら後継者争いに巻き込まれ、あらぬ疑惑を掛けられて、1595年に秀次は自害、八幡山城は廃となったそう。

いつの世も権力争いは醜いものですね(^_^;)

堀沿いを散歩していると蕾のままの桜が。

OI000019.jpg

あと一週間もすればきれいな桜が咲くんでしょうね。

梅はちょうど見どころだったようです。

OI000023.jpg

そのまま歩いて日牟禮八幡宮までお散歩。
立派なお馬がお出迎えしてくれました。

OI000033.jpg

なかなかユニークな顔立ちですね(^^)

OI000034.jpg

境内を進むとなんとも気になるポイントが。

OI000026.jpg

近づいてみましょう。

OI000027.jpg

生まれてこの方、嘘を付いたことはない!!
ということではないのですが、鏡池を覗いてみましょう。

OI000028.jpg

とりあえずは大丈夫だったようです☆

近くにあるたねや(和菓子)さんに休憩がてら寄りました。
その場で焼きたてのつぶら餅をいただけます。

OI000038.jpg

うん、なんだろうこの既視感。
なぜかソースや青のりをかけたくなりますね(^^)

お味の方はもちろんたこ焼きではなく、焼き立てで温かくてとても美味しかったです。
一緒に出していただける小豆茶も非常によい風味で一息つけました。

日帰り旅行だったので、あまり時間の余裕もなかったのですが、まだまだ回りたりませんね(^_^;)
また近いうちに行ってみようと思います。

ちなみに帰りは車で琵琶湖大橋を渡りましたが、結構すぐに渡りきってしまうんですね。
ちょっと拍子抜けでした(笑)

以上、久しぶりのcowboyが立つシリーズでした!!

OI000017.jpg


今度は6月の名古屋かな?うぇいうぇいうぇい☆

記事が良かったなら↓をクリックして応援願いますm(_ _)m

Cordovaでのハイブリッドアプリ開発でつまずいたこと

こんばんわ!cowboyです☆

「接客英語アプリ」のiPhone版もアンドロイド版も更新し、iPad版もリリースしたので一段落です。

僕はCordovaを使ったハイブリッドアプリ開発(1つのコードでiOS・Androidの両方のアプリを開発する)の手法を取っているのですが、まあちょこちょこうまくいかず(特にiOS版)に詰まりましたよ(^_^;)

今回は(特にiOS版で)大きく詰まったところTop3を紹介したいと思います。

①Cordovaのサードパーティー製Admobプラグインはトラフィックを2%抜かれる。

CordovaでAdmob広告を載せるためにプラグインを導入するんですが、公式がないのでサードパーティー製を使うわけです。
ネットで検索すると日本語のサイトではcordova-admob-proがよく(というかほぼ)紹介されているんですね。
じゃあ使おうかと思って作者のGitHubのREADMEを読むと以下のように書いてます。

"You can use this plugin for free during trial purpose. If it earns less than $1000 for you, you can continue to use for free.

If use in commercial project, please get a license, or, you have monetized more than $1000 using this plugin, you are also required to: either get a commercial license ($20), or, no need pay but share 2% Ad traffic, read the License Agreement for details. As a commercial customer, you will be supported with high priority, via private email or even Skype chat."


みんな、よく英語読まないと。やられてますよ(笑)
20ドル払ってライセンスを買わないと、トラフィックの2%抜かれます。
まあ収益が1000ドルを超えないと抜かないって書いてますが、微妙ですね。

じゃあ違う人が作ったプラグインを使おうと探しましたが、他の方も「2%のトラフィックを寄付としてもらうよ!払いたくなかったら自分でコードとハックしてね!バルセロナから愛をこめて☆」みたいな感じで同じでした。

それならばプラグイン無しで自力でadmob SDKをcordovaに組み込むぜ!!と2日かけて取り組みました!!

挫折orz

というわけで現状はadmob-proをハックした人のプラグインを信じて使わせていただいています。
まじでグーグルさん、公式でプラグイン出してくれませんかね。安心して広告載せれません(^_^;)
とりあえずは解決(としよう)!

②iOSでfirebaseプラグインを実装するとエラーが生じる
Firebaseの解析を利用するためにfirebaseプラグインを組み込んだのですが、Androidでは何のエラーも吐かなかったのですが、iOSだと何故か実機でアプリをどうさせることが出来ません(エミュレーターなら起動する)。
以下のようなエラーが出て、SigningのTeamを正しいものに選択しても何故か認証が通りません。

Check dependencies
Automatic signing is unable to resolve an issue with the "○○○(アプリ名)" target's entitlements files.Remove the entitlements or switch to manual signing and resolve the issue by downloading a provisioning profile from the developer website.
Provisioning profile "iOS Team Provisioning Profile: ○○○◯(アプリのプロジェクト名)" doesn't include the aps-environment entitlement.
Code signing is required for product type 'Application' in SDK 'iOS 10.2'


めちゃめちゃ困った。調べまくっても何も情報がない。Stack Overflow(海外の技術者の掲示板みたいなもの)で調べてもわからない。同じようなエラーの対処法をしても全く治らないし、そもそも原因が違う。

Xcodeで色々いじってたらTARGET→Capabilities→Push NotificationsをONにしたら治りました。
Firebaseは通知を出したりできるので、ここがONになっていないとエラーがでるようですね。
Swiftでコーディングするときはpodを使うので、そのへんは自動でやってくれているようなので全然気づかなかった。
とりあえず解決!!

③iOSで読み上げ機能(tts)を利用する際に、実機でのみ正常に動作しない
さあ実際にコードが書き終わってエミュレーターでの検証も完了したので、実機テストということで、僕が唯一持ってるiOS製品、iPad Airで実行しました。
あれ?なんか、挙動が違う!!
エミュレーターでは読み上げ中に違う文章を読み上げさせようとすると、読み上げ途中の音声を停止して新たに読み上げ音声が再生されます。しかし実機では読み上げ途中に違う文章を読み上げさせようとすると、停止せずにそのまま読み切った後しばらく新しい読み上げ音声を生成しようとしません。
おかしい。
というわけでログを見るとエラーが出てますね。はい。

AVAudioSession.mm:1053:-[AVAudioSession setActive:withOptions:error:]: Deactivation an audio session that has running I/O. All I/O should be stopped or paused prior to deactivating the audio session.

これに関してはStack Overflowでもちょくちょくと話題になっていて、safari(つまりiOSのWebView)では音声再生中に別の音声命令(例えば停止や別の文章を読み上げさせる)を行うとエラーが起きて正しく動作しないとのこと。
その対処法の結論が「iOSのWebViewのバグだから諦めろ」でした(^_^;)
なんだと?WebViewのバグだと?じゃあUIWebViewじゃなくてWKWebView(こっちのほうがクラッシュとかが少ないらしい)に変えてみる!!

結果ダメでした。

なんてこった。エミュレーター上では予定通りの挙動をするのに実機でダメだなんで。。。

というわけで全部詰まったんですが、③だけが解決策を見つけることができませんでした。
なのでiOS版はhtml5・CSS3・JavaScriptによるハイブリッド開発を断念して、普通にSwiftで更新しました。
う〜ん、AndroidとiOSのアプリ同時開発ができると思ったんですが、うまくいかないですね(^_^;)
一応オーディオを扱わなければ問題なさそうなので、そういうアプリを開発するときはCordovaだけで開発したいと思います。

以上cowboyでした!!うぇいうぇいうぇい☆


記事が良かったなら↓をクリックして応援願いますm(_ _)m

Android版アプリ「Vibronome」「接客英語アプリ」配信開始!!

こんばんわ!cowboyです☆

少し前にCordovaによるハイブリッドアプリ開発に手を出したことを書きましたが、
とうとうAndroid版の「Vibronome」「接客英語アプリ」を配信開始しました!

先行していたiPhoneを元に再構成していますので、より使いやすくなっていると思います。


Vibronome

Vibronome-android.png
google-play-badge.png


接客英語アプリ


shot1_201702181746203f5.png shot2_2017021817462033e.png

shot3.png shot4_20170218174624602.png


google-play-badge.png

開発したアプリは自分で使いたいと思っていたものを自分で作ったものでして、
僕はAndroid使いなので、今まで自分で開発したアプリは自分で使えなかったんですよね(笑)
これでやっと自分で使えます(笑)

Cordovaは意外と簡単なのでガンガン開発できそうですね!

以上cowboyでした!
うぇいうぇいうぇいうぇい☆

記事が良かったなら↓をクリックして応援願いますm(_ _)m