ライブラリの最新版を探すのに役に立ちそうな。
OK, Gradle! - Plugins | JetBrains
使ってみたけど、役に立つと思う。
動画のように、いろいろあるけど、
いちいち参照先探すのも面倒だから。
ライブラリの最新版を探すのに役に立ちそうな。
OK, Gradle! - Plugins | JetBrains
使ってみたけど、役に立つと思う。
動画のように、いろいろあるけど、
いちいち参照先探すのも面倒だから。
こんなエラーメッセージ。
E/AndroidRuntime: FATAL EXCEPTION: main
Process: ru.balumates.balu, PID: 4409
java.lang.RuntimeException: Unable to get provider com.google.android.gms.ads.MobileAdsInitProvider: java.lang.IllegalStateException:
******************************************************************************
* The Google Mobile Ads SDK was initialized incorrectly. AdMob publishers *
* should follow the instructions here: https://goo.gl/fQ2neu to add a valid *
* App ID inside the AndroidManifest. Google Ad Manager publishers should *
* follow instructions here: https://goo.gl/h17b6x. *
******************************************************************************
at android.app.ActivityThread.installProvider(ActivityThread.java:6242)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:5805)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5722)
at android.app.ActivityThread.-wrap1(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1656)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
Caused by: java.lang.IllegalStateException:
******************************************************************************
* The Google Mobile Ads SDK was initialized incorrectly. AdMob publishers *
* should follow the instructions here: https://goo.gl/fQ2neu to add a valid *
* App ID inside the AndroidManifest. Google Ad Manager publishers should *
* follow instructions here: https://goo.gl/h17b6x. *
******************************************************************************
at com.google.android.gms.internal.ads.zzmn.attachInfo(Unknown Source:17)
at com.google.android.gms.ads.MobileAdsInitProvider.attachInfo(Unknown Source:3)
at android.app.ActivityThread.installProvider(ActivityThread.java:6239)
... 10 more
Disconnected from the target VM, address: 'localhost:8600', transport: 'socket'
Google Mobile Ads SDK v17.0.0 以降で必須だと。
Google Ads Developer Blog: Announcing v17.0.0 of the Android Google Mobile Ads SDK
このことは、
implementation "com.google.firebase:firebase-ads:17.0.0"
も同じ。
以下、AndroidManifest.xml の必須記述。
<manifest>
<application>
<meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="ca-app-pub-################~##########"/>
</application>
</manifest>
Ad Manager や NativeAppInstallAd / NativeContentAd も注意が必要な模様。
シンプルな記事あったので。
Learn Kotlin for Android in One Day – Mayur Rokade – Medium
変数は「var」。
var username: String = "some user name"
定数は「val」。Java の final と等価。
val API_DELAY_CONSTANT: Int = 100
null で初期化するには「?」。 null を利用可能にします。
var myString: String? = null
static な定数には「companion object」。
class Animal {
companion object {
const val DEFAULT_NUM_OF_EYES = 2
}
}
animal.numOfEyes = Animal.DEFAULT_NUM_OF_EYES
遅れて初期化するには「lateinit」。
lateinit var user: User
lateinit var items: List<String>
これは、public。Int を返します。
fun getNumber(): Int {
return 1
}
private で引数を渡す場合。
private fun getStringLength(str1: String, str2: String): Int {
return str1.length + str2.length
}
static 関数。
class MyStringUtil {
companion object {
fun getOddLengthString(str: String): String? {
if (str.length % 2 == 0) return null
return str
}
}
}
var str: String = MyStringUtil.getOddLengthString("hey")
「?」を使って、null を返すことをコンパイラに伝えています。
コレクションである items に「in」で。
var items: List<String> = ArrayList<String>()
for (item in items) {
// do something with item
}
インデックスにアクセスすることもできる。
for (index in items.indices) {
// access items using index
// items.get(index)
}
Java の switch は、Kotlin では「when」。
// A cool example of when statement
fun describe(obj: Any): String? {
var res: String? = null
when (obj) {
1 -> { res = "One" } // if obj == 1
"Hello" -> res ="Greeting" // if obj == "Hello"
is Long -> "Long" // if obj is of type Long
!is String -> "Not string" // if obj is not of type String
else -> {
// execute this block of code
}
}
return res
}
Java で NPE を避ける場合。if で。
if (person != null && person.department != null) {
person.department.head = managersPool.getManager()
}
Kotlin では「?」を使って、if を省くことができる。chain可能。
person?.department?.head = managersPool.getManager()
null の場合を処理したいときは「?:」を使う。
var name = person?.name ?: throw InvalidDataException("Person cannot be null.")
「open」で継承可能。なければ, Java の final class と同じ。
open class Animal {
// This class is open and
// can be inherited
}
class Dog : Animal() { // Notice the paranthesis
// Class dog is final and
// can't be inherited
}
// Compiler throws error
class Labrador : Dog {
}
「object」を使う。
object Singleton {
var name: String = "singleton object"
fun printName() {
println(name)
}
}
// later in the code
Singleton.name
Singleton.printName()
インターフェースの継承は直感的に。
interface Named {
fun bar()
}
interface Person : Named { // Person inherits Named
fun foo()
}
class Employee() : Person {
override fun bar() {
// do something
}
override fun foo() {
// do something
}
}
関数に渡す場合は少し違う。
// A function that accepts and interface as a parameter
private fun setOnClickListener(listener: View.OnClickListener) {
// do something
}
// Passing an interface to the function
setOnClickListener(object : View.OnClickListener{
override fun onClick(view: View?) {
// do something
}
})
「is」や「!is」を使う。
if (obj is String) {
print(obj.length)
}
if (obj !is String) {
print("Not a String")
}
「as?」を使って例外を避けてキャスト可能。失敗時には null を返す。
val x: String? = y as? String
Java とほぼ同じ。
throw Exception("Hi There!")
try {
// some code
}
catch (e: SomeException) {
// handler
}
finally {
// optional finally block
}
重要な最小限の部分からきちんと学んでいくこと大事。