2017年3月8日水曜日

Some file crunching failed

Some file crunching failed

Android Studioを2.3に改版すると下記のエラーが発生した。

Information:Gradle tasks [clean, :(省略):generateDebugSources, :(省略):generateDebugAndroidTestSources, :(省略):mockableAndroidJar, :(省略):prepareDebugUnitTestDependencies, :(省略):compileDebugSources, :(省略):compileDebugAndroidTestSources, :(省略):compileDebugUnitTestSources, :app:generateDebugSources, :app:mockableAndroidJar, :app:prepareDebugUnitTestDependencies, :app:generateDebugAndroidTestSources, :app:compileDebugSources, :app:compileDebugUnitTestSources, :app:compileDebugAndroidTestSources]

15:54:20.374 [ERROR] [org.gradle.api.Project] AAPT err(Facade for 727369730): \\?\C:\Users\漢字\.android\build-cache\91d4fc3623f1db2e13d9719feb5cd41e8a96b0c9\output\res\drawable-xxhdpi-v4\googleg_standard_color_18.png ERROR: Unable to open PNG file

解答は次のサイトを参照してください。
http://stackoverflow.com/questions/42580645/errorsome-file-crunching-failed-see-logs-for-details-afer-update-gradle

原因:Windowsにおけるフォルダーの名前に2バイト文字を使用していたため。
解決方法:プロジェクトのルートにあるgradle.propertiesファイル内に、次の1行を書きこんでください。
android.enableBuildCache=false

又は、上記の値をtrueにした上で、ASCII文字だけで構成されるフォルダー名を下記のように設定します。
android.buildCacheDir=C:/akan-mata-bagu-ya/build-cache

2017年1月4日水曜日

MY_PACKAGE_REPLACEDの動作確認

MY_PACKAGE_REPLACEDの動作確認

Android Studioで、初期設定のままでデバッグを行うと、開発中のアプリのインストールと起動とが連続して行われてしまう。本番の環境では連続して行われることはない。
このままだと、action.MY_PACKAGE_REPLACEDに基づく動作確認が正確にできないかもしれない。

これを別々に行うには下記の設定をする。
Android Studio > Run > Edit Configurations... において、左上端の「+」を押し下げる。
「Android App」を選択する。
General > Installation Options > Deploy 及び General > Launch Options > Launch には、各々「Nothing」という項目があるので、この項目を活用すれば、インストールと起動とを別々に(連続させずに)行うことができる。

action.MY_PACKAGE_REPLACEDによる受信ができない

action.MY_PACKAGE_REPLACEDによる受信ができない

デバッグ環境において、今まで正常に動作していたMY_PACKAGE_REPLACEDによる受信ができなくなった。
Android端末を再起動すれば、受信できるようになりました。

2017年1月3日火曜日

ContentResolver#query() return null

ContentResolver#query() return null

古い機種は、端末の電源投入後、起動完了状態になるまで、1分以上かかる。
この間(起動が完了していない状態。起動途中の段階)で、ContentResolver#query()を使うと、nullが返る。

起動途中の段階でgetContentResolver()を実行した場合であっても、利用可能なContentResolverが返されてくる。

ContentResolver#query()を使いnullが返された場合、その原因が、起動途中の段階なのか、それともAndroidシステムに異常があるのか確認した方が良いかもしれない。
例えば、SystemClock#elapsedRealtime()とThread#sleep()を併用して、2分程度待つようにすれば良い。
なお、elapsedRealtime()は、電源投入を起点とした経過時間をミリ秒単位で返す。