2017年3月25日土曜日

ぶんぶんの花粉症対策

こんばんは。

前回、腹痛改善について書きましたが、今回は、花粉症対策に役立っているものを紹介します。

外出するときは、マスクをするのは当然ですが、それでも、鼻水は出ます。

一番、良いなと思うものは、点鼻薬です。

私は去年買った「グローα AG 点鼻薬」を今年も使っています。

鼻が出てきたら、これを両方の鼻の穴に突っ込んで、シュッシュッとします。

ほんのちょっとだけ、薬剤の液体も加わって、じゅるじゅるしますが、次第に止まります。

持ち運びにも邪魔になりません。

仕事中に自分の席でシュッシュッとしていました。

アマゾンや楽天で検索してみましたが、ヒットしませんでした。

代わりに、アレルギー点鼻薬で検索した結果を載せておきます。



また、翌日、花粉が飛びまくるなというときは、前日の寝る前に、「アレジオン」を飲みます。

その日に飲む薬は眠くなってしまいますよね。

個人差があるかもしれませんが、「アレジオン」は、前日に飲むので、私は、眠くなりませんでした。

↓アレジオンです。





また、寝ているときに、鼻水がひどい人は、寝る前に鼻うがいするといいです。

鼻うがいの液も売っています。



私は、鼻うがいが、苦手で大嫌いなので、やりませんが・・・。


鼻うがい以外の対策で、今年も乗り切ります!

花粉症でお困りの方で、上記の対策をしたことない方、お試しあれ!


以上です!

最近、腹痛しなくなりました!LG21の効果!?

こんばんは。


タイトルにあるように、最近、腹痛しなくなりました。

同じような悩みの人はたくさんいると思いますので、紹介したいと思います。


私は、子供のころから、よく腹痛になり、トイレに駆け込むことが多かったのですが、大人になってからも、変わりませんでした。

朝、電車に乗っているときに、腹痛になるのが怖くて、朝ご飯は食べずに、出勤していました。

仕事中も何回もトイレに行ってました。

そしたら、個室が開いてないことが多いんです。

急いで、別の階、別の棟に行って、開いているところを探し回ります。

本当に、大変でした。


今年の冬は、寒いこともあってか、特にひどかったです。1週間下痢だったときもあります。

ビオフェルミンは毎食後に飲んでいたのですが、だめでした。

近くの内科に行っても、胃腸薬を出されるだけで、あまり効果はありませんでした。


そこで、最近、話題のヨーグルトを試してみることにしました。

自分ではどれがいいか調べたわけではないのですが、彼女に、「LG21」がいいんじゃないかとアドバイスされたので、「LG21」を毎晩食べることにしたのです。




↑これです。明治プロビオヨーグルトLG21のアロエ入りです。


↓アロエ以外にもプレーンと砂糖0があります。




もう1か月は食べ続けていますが、この1か月腹痛した記憶がありません!!

いまになって、調べてみました。

まず、LG21乳酸菌がピロリ菌除去に効果的みたいです。

そして、薬だけよりもLG乳酸菌ヨーグルトを摂取した方が効果が大きいらしいです。

LG乳酸菌ヨーグルトは、生きたまま腸まで届き、整腸効果もあるようです。

腸内環境が乱れると肌荒れや便秘、免疫力の低下になってしまうので、これらの予防にもなるらしいです!

なるほど、なるほど。

LG21乳酸菌は、大学の教授と明治さんとわかもとさんの共同研究で特許を取ってあるみたいです。

わかもとさんからは、薬が出ています。




わかもと整腸薬の方が、日にち換算すると安くなりますね。


まだ1か月しか続けていないですし、私は、ヨーグルトのLG21を続けたいと思います。

今思うと、彼女は、私の症状を見て、色々調べて、ヨーグルトのLG21を薦めたのだと思います。

感謝しなければ。

難読化について

こんばんは。


JAVAの実行ファイルは、解読が容易です。

難読化することによって、解読が難しくなります。

変数名や関数名が、「a」とか「b」という簡単な名前に変わります。

難しくなるだけであって、解読できないわけではありません

しかし、バレバレの状態よりも読みにくい状態にしておいて、損はないと思います。

また、変数名が短縮されるわけですから、容量が節約できます。

詳しくは、こちらを参照ください。



難読化の手順を簡単に記しておきます。


1.build.gradleを変更。



上記のようにminifyEnabledをtrueに変更し、proguardFileのパスを設定します。

私の場合は、「C:/Users/[UserName]/AppData/Local/Android/sdk/tools/proguard/proguard-android.txt」でした。


2.ビルドしてみて、エラーや警告に対応。


まず、sun.misc.Unsafeの警告が大量にでました。

以下のように、proguard-rules.proに追記します。



3.動かしてみて、エラーに対応。


releaseしか難読化できませんので、release版を実機などにインストールして、動かしてみます。

gsonのエラー、driveのエラー、zbarのエラー、adsのエラーに対応しました。

最終的に、以下のようになりました。



4.リリース後に、マッピングファイルもアップロードしておきます。


これについては、前述のこちらを参照ください。


以上です。

2017年3月24日金曜日

プレビューで色が取れない

こんばんは。

前回、「色も取れないらしく、colors.xmlに設定してある色ではなく、デフォルトの色で表示されてしまいます。」と書きましたが、再現してしまいました。


上記以外に、colors.xmlに設定してあるcolorを使用しているlayoutファイルを開くと、プレビューに以下のエラーが表示されます。



Couldn't resolve resource @color/colorAnything


実行すると、ちゃんと設定した色で表示されます。



色々調べた結果、以下で解決しました!!


1.「File」 -「Invalidate Caches / Restart...」をクリック。

2.表示されるメッセージ画面で、「Invalidate and Restart」をクリック。



キャッシュをクリアして、再起動するみたいです。

起動に、結構時間がかかりましたが、直りました。


2017年3月17日金曜日

layoutファイル名に大文字はダメ

こんにちは。

しょうもないエラーに引っかかってしまいました。恥ずかしい内容ですが、同じ過ちをしないようにするためにも、残しておきます。

ガリガリ、コーディングしていて、ふと、気づいたら、layoutファイルのプレビューで、エラーになってしまっていました。

styleが定義されていないというエラーだったと思います。
色も取れないらしく、colors.xmlに設定してある色ではなく、デフォルトの色で表示されてしまいます。

全然、原因が分からなく、時間だけが過ぎていきました。

ビルドすると、次のようなエラーが出ました。


'B' is not a valid file-based resource name character: File-based resource names must contain only lowercase a-z, 0-9, or underscore


英語は分かっているようで、分かっていませんでした。
指摘されたファイルの中で、大文字を使ってはいけないのかと勘違いしてしまいました。

原因は、layoutファイル名に、大文字を使っているからでした・・・。

原因が判明してから、改めて英文のエラーを読むと、なるほど、そう言ってる・・・。

以後、気を付けます。


2017年3月16日木曜日

こんなの欲しかった!スマホスタンド

こんにちは。

便利グッズを紹介したいと思います。

androidのアプリ開発を行っているのですが、デバッグで、スマホとパソコンを繋いで、スマホで動作確認をします。

パソコンでコードを書くときは、繋いだまま、座っているところの横に置いたり、パソコンデスクの上に置いてました。

動作確認するときに、いちいちスマホを手に取っていました。

どうもやりにくく、スマホをパソコンの画面の前に立てられたらなぁと思っていました。

ただ、あったとしても高いんだろうなと思っていたのですが、なんとなくAmazonで探してみました。

はじめは、車で使うスマホスタンドがヒットしてたのですが、パソコンの横に立てるのにいいものを見つけました!値段も安く、1,099円です。即、買いました!

写真を載せます。




スマホを載せるだけです。載せる部分の厚さは1.3mmあります。
大抵のスマホは載せられると思います。 
また、角度を自由に調整できます。





後ろです。穴が開いているので、後ろにコードを通せます





底です。ストッパーが4か所ついています。画面をタップしてもスタンドは動きません。






スマホを置きました。コードも差せます


パソコンからスマホへ操作の移行にストレスがなくなり、とても開発がしやすくなりました。
ちなみに、スマホの設定で、充電中に画面をスリープにしないようにしています。

androidの開発をしていなくても、パソコンを使っている人にもよいのではないでしょうか。

タブレットにも使えると書いてあります。タブレットは持っていないので、試せないですが・・・。

Amazonの広告です。




私は、黒を買いましたが、銀もあるようです。iPhoneなら、銀ですかね。
お値段が少し高くなって、 1,198円です。





Unitテスト Mockito、PowerMockitoで、Staticメソッドをモック

こんにちは。

前回に続いて、UnitテストでMockito、PowerMockitoを使います。

今回は、Staticメソッドをモックします。例として、設定クラスのSharedPrefrencesクラスをあげます。


Build.gradleの設定は、前回のページを参照してください。
まずは、import部分です。


続いて、import部分以外を載せます。


細かく見ていきます。クラス宣言部分に、アノテーション「@RunWith(PowerMockRunner.class)」と「@PrepareForTest({PreferenceManager.class})」を付けています。
前者は前回も付けましたが、後者はPreferenceManagerクラスのStaticメソッドをモックするために付けます。



そして、以下の部分で、PreferenceManagerクラスのStaticメソッドgetDefaultSharedPreferencesをモックしています。



whenに指定する関数の引数は、以下のように、anyString、anyBooleanなどを指定できます。これは、String型の何か、Boolean型の何かを意味します。


少し、はまったのがgetStringのモックですが、ActivityからgetStringするようにし、テストは以下のようにしました。



2017年3月14日火曜日

Unitテストについて Mockito

こんばんは。

今日は、Unitテストについてです。


Unitテストは、JUnitとMockitoを使用しました。

Gradleのdependenciesに以下を設定します。


まずは、import部分です。今回説明しないクラスも含まれています。


テストクラスにアノテーション「@RunWith(PowerMockRunner.class)」を付けます。また、TestCaseクラスをextendsします。
setUpで、実行前の準備をします。tearDownで終了後の解放などをします。
例として、getIdsというテストを作成しました。


CursorRecyclerViewAdapterクラスは、MainActivity.getIds内で参照しているクラスです。このクラスをモックします。


そして、when(...).thenReturn(...)で、モックしたクラスの戻り値を設定します。
以下の行は、getItemCount()の戻り値は「3」としています。


次に、テストをしたい関数を実行します。



最後に、結果の検証です。
以下の行は、stringArrayList.size()の値が「3」であればOK、それ以外ならNGです。



今日はここまでにします。

2017年3月7日火曜日

Androidアプリ開発の学習について

こんにちは。

私がAndroidアプリ開発を始めるにあたって、読んだ本を紹介したいと思います。

私は、20年近くプログラミング経験がありますが、Javaの経験は1年未満です。

最初に勉強したのは、C言語で、一番経験が長いのは、Visual Basic6.0(VB6.0)です。

VB6.0は既にサポートが終了しているにも関わらず、ずっと使っていました。

他には、Visual Studio C、C++、C# です。

Javaの経験が少ないですが、その他の言語、特にC#の経験があるので、Javaについては不安はありませんでした。Androidは初めてなので、Androidを重点的に学習しようと思いました。



Androidアプリ開発を始めようと思い選んだ本がSB Creative社から出ている「基本からしっかり身につくAndroidアプリ開発入門 Android Studio 2.x対応」です。

Javaは既に習得済みということが前提の本です。


まず、Chapter.1で、Android Studioのインストールから、エミュレータの実行、実機(スマホ)との接続が書かれています。

大変分かりやすく、問題なく設定できました。


次は、実際にコーディングが始まるのかと思いきや、Chapter.2は、Androidアプリについての解説です。

アクティビティやフラグメント、サービスなどの説明、それらのライフサイクルなどの説明が書かれていています。

大事なので、しっかり読みました。


そして、Chapter.3からコーディングです。

本書に書かれているサンプルプログラムは、SB CreativeのHPからダウンロードできます。

ダウンロードして、デバッグしつつ、本書を読み進めていきました。


SQLiteデータベース、SharedPreferences(設定)、 コンテントプロバイダ、フラグメント、RecycleView、非同期処理、HTTP通信、JSONなどなど。

そして、カメラ機能です。

カメラ機能は、従来のCameraクラスが非推奨となり、Camera2が推奨となっていますが、その両方が書かれています。

本棚やCDラックでバーコード読み込みにカメラ機能を使用しているので、大変参考になりました。 サンプルがダウンロードできるのが、いいですね。

続いて、地図について書かれていて、最後がアプリの公開です。

もちろん、不足部分はネットで調べますが、今でも、この本を読み返します。


SB Creative社のHPは、こちらです。
試し読みや、サンプルプログラムのダウンロードができます。

Amazonのページです。




楽天のページです。


価格:2,970円
(2017/3/7 19:10時点)
感想(1件)


2017年3月4日土曜日

ドコモあんしんスキャンについて<続報>

こんばんは。

以前、「ドコモあんしんスキャンについて」という記事を書きました。

gradleの2.2.3を使うと、スマホにインストール時に、PUPとして検出されてしまうという件です。


昨日、Android Studioを開いたところ、Gradleのアップデートがあると表示されました。




PUPが検出されるという件は、解消されるのか!?と思い、アップデートして、スマホにインストールしてみました。

結果は、PUP検出されない!

Android Studioを立ち上げるたびに、アップデートしますかというメッセージが出て、うんざりしていましたが、やっと解放されます。

こちらが、release notesです。

以上です。


2017年3月3日金曜日

Activity間のデータ受け渡しについて

こんにちは。

Activityを起動するには、以下のようにします。




引数を渡したい場合は、以下のようにします。




起動したActivity側で、引数を取り出します。




戻り値を受け取りたい場合は、起動を以下のようにします。




REQUEST_CODEは、適当なint型の値です。そして、起動されたActivityで戻り値を設定します。




呼び出し側の受け取りです。




この記事を書きながら気づいたのですが、setResultには、Intentを引数に持つものもあるようです。色々な値を戻せそうです。


2017年3月1日水曜日

またまた、非同期処理について・・・コールバック

こんにちは。

以前、非同期処理について書きましたが、今回も書きたいと思います。


以前の記事は以下です。

非同期処理について・・・AsyncTask
非同期処理について・・・AsyncTaskLoader
非同期処理のCursorLoaderについて


AsyncTaskLoaderとCursorLoaderを両方実装したい場合、コンパイルエラーとなり、うまくいきませんでした。Overrideする関数の戻り値の型がエラーとなります。

Activityにimprementsして、ローダーにコールバックとしてActivityを渡していたためです。
なんてことはないです、コールバックをそれぞれに作成してやればよいです。

CursorLoaderのコールバックを以下のようにします。


そして、ロード時にmCallbackを渡します。



このようにしておけば、AsyncTaskLoaderを、同じように別のコールバックを作成するか、Activityにimprementsしてやって、実装できます。

「SYSTEM_ALERT_WINDOW」パーミッションについて

こんばんは。

以前の記事、「パーミッションについて」で、パーミッション、権限許可の取り方を書きました。
それに関連して、今日は、 「SYSTEM_ALERT_WINDOW」パーミッションについて書きます。

Androidの画面は、複数のレイヤーが重なっています。
1番下がアプリ、2番目が電話、・・・、1番上がシステムエラーという具合に、重なっています。
通常のアプリの上に、何かを表示したい場合は、上のレイヤーに表示するようにします。

システムアラートのレイヤーに表示させたい場合、「SYSTEM_ALERT_WINDOW」パーミッションを設定する必要があります。
しかし、この「SYSTEM_ALERT_WINDOW」パーミッションは、「パーミッションについて」とは違い、実行時に確認する必要はありません
 マニフェストファイルに以下を設定しておけば、Google Playからインストールされたときに自動で設定されるようです。



本当に、自動で設定されるのか心配でしたが、ダビマスメモを公開して設定されることを確認しました。


ただし、デバッグなどで端末にインストールしたときは、例外が発生してしまいます。
「設定」の「アプリ」の歯車の「他のアプリの上に表示」で、対象のアプリを「可」にしてやれば、例外は発生しなくなります。

これを毎回やるのはさすがに面倒なので、権限が設定されていない場合は設定画面を表示するようにしてやりました。



このようにしておけば、システムアラートレイヤーに表示するときに、以下の設定画面が表示されます。



許可してやれば、デバッグができます。