高解像度のディスプレイで使っていると、ある時からAndroidStudioのLogcatが表示されるところの字が非常に小さくなって見づらくなりました。
「まるで、ゴミのようだ!!」
というわけで、設定を変更します。
File→Editor→Color Scheme→Console Font
で変更できます。
File→Editor
にもFontがありますが、これはソースコードなどの表示ですね。
高解像度のディスプレイで使っていると、ある時からAndroidStudioのLogcatが表示されるところの字が非常に小さくなって見づらくなりました。
「まるで、ゴミのようだ!!」
というわけで、設定を変更します。
File→Editor→Color Scheme→Console Font
で変更できます。
File→Editor
にもFontがありますが、これはソースコードなどの表示ですね。
Kotlin(コトリン)の勉強を始めたばっかりです。6年ぐらいJavaをやってて、まぁ、今度のAndroidアプリはKotlinでやってみるか、ということで始めました。
本を読んでいて、次のようなサンプルコードに出会いました。
tailrec private fun gcd(a: Int, b: Int): Int =
if (b == 0) a
else gcd(b, a % b)
tailrecとはなんぞや!!
Kotlin公式サイトで見ます。残念ながら現時点では英語しかないらしい…。
https://kotlinlang.org/docs/reference/functions.html#tail-recursive-functions
簡単に、意訳しますね!
tailrecの修飾子がついた関数は、条件を満たせば、再帰関数をスタックオーバーフローの心配なく使える。
条件は
・その関数自体の呼び出しが、関数の最後である
・try catchブロックの中ではない
だそうです。
以上が、超簡単なtailrecの話でした。以下は、もうちょっと詳しく補足です。
—————————————————-
そもそも、tailrecの日本語が「末尾再帰」なのか「末尾再帰最適化」なのか、よくわかりませんが、再帰関数の、返り値が末尾で再帰する場合、Kotlinの場合はJVMがいい感じに処理してくれるということです。
何がいい感じなのかというと、再帰関数というのはスタックオーバーフローを起こしやすいのです。
自分自身を参照して、ぐるぐる回るので、なかなかストップ条件にいたらない場合、そうなりがちですね。
しかし、 末尾再帰最適化 では、それを普通のwhileループみたいに内部で書き換えてくれるので、スタックオーバーフローの心配がなくなるのです。
すごいー。
「じゃあ、最初からwhileとかで書けばいいじゃん」
という人もいると思います。
♪違う違う~ そうじゃ、そうじゃなーいー
再帰関数はあまりJavaとかでは出てこないですけども、使えると便利なシーンがあります。同じことを何度か繰り返す場合ですね。
その時に、
「ああー この入力値がもしかしてバカでかかったらスタックオーバーフローで止まってしまうのでは…」
と心配をしなくていいのは、素晴らしいことなんです。
Android5以上のスマホでは正常に立ち上がるのに、5より下のバージョン、(ここでは4.3を利用して試しています。)では
java.lang.RuntimeException: Unable to instantiate application smart.location.admin.hogehoge.MyApplication: java.lang.ClassNotFoundException: Didn't find class "smart.location.admin.hogehoge.MyApplication" on path
というエラーが一番最初のコード実行時に出て、立ち上がらなくなることがあります。
APIレベルでいうと19以下ということですね。
下記の、
https://developer.android.com/studio/build/multidex
というのが関係しているので、読んでみて、自分のソースコードに合うのをやってみてください。
私の場合は、gradleを変更し、MyApplication(最初に実行されるクラス)を下記のように変更したらできました。
public class MyApplication extends Application { ... }
上記を下記に変更↓
public class MyApplication extends MultiDexApplication { ... }
書くまでもないことかもしれないけど、書かないときっと忘れるシリーズ。
自分がした変更で、
「あれ、あそこでどうやってああしたんだっけ?」
みたいなの見たいことありますよね?
2パターン紹介しておきます。
①見たいレポジトリを選択する
②Contributers というところをクリック
③自分の名前の下のコミットの数のところをクリック
これは場所がわかりにくいと思うのでスクショ載せておきます。
下記の赤丸のところです。
上記のGithubで見る方法だと、ブランチごとでしか見れなかったりしますね…。
どこのブランチでした変更か覚えていない場合、探すのが大変です。
そんな時は、Gitコマンドでやっちゃいましょう!
git log –pretty=”%h – %s” –author=”akiko.goto”
これで、ずらずらと出てきてくれます。
ちなみに、今回は自分の名前で、ってことになってますが、もちろん
–author=”akiko.goto”
のauthorを変えれば、ほかの人の修正履歴が見れるってことです!
今日は表題のエラーで5時間ぐらいを費やしました…。
王大人「死亡確認!!」
…
さて、不思議なことが起こりまして、とあるAndroidアプリを、Release版はインストールできるんですが、Debug版が実機でインストールできない。
上記のエラーが出るんですよね。
最初は、google-services.json関係のエラーかと思って、その辺をFirebaseからダウンロードしたりしてましたが、直りませんでした。
結局、ほかのアプリで実績のある、gradleのバージョンとgoogle-servicesのバージョンの組み合わせで試したところ、無事に解決…。
buildscript {
repositories {
jcenter()
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.2.1' //これ
classpath 'com.google.gms:google-services:3.2.0' // これ
}
}