Translate

BTemplates.com

Powered by Blogger.

ラベル AndroidStudio の投稿を表示しています。 すべての投稿を表示
ラベル AndroidStudio の投稿を表示しています。 すべての投稿を表示

2017年11月3日金曜日

2017-11-02 到達点メモ


昨日の続き
よく見たら、昨日の記事にVoiceTimerをKotlin化するとか書いていないが
昨日からそれの作業をしている。

おそらくkotlinに変換した場合が原因だと思われるのだが
どうもcontextとは予約語の一部として採用されている節がある。
kotlinは、get/setを使わないで全部変数で採用する部分があったので
その影響を受けている節がある
単に、変数として使っているだけなら、名前は変えたほうが良い

具体的には、以下のような注釈が付く
Call requires API level 23 (current min is 21): android.app.Fragment#getContext less... (Ctrl+F1)
This check scans through all the Android API calls in the application and warns about any calls that are not available on all versions targeted by this application (according to its minimum SDK attribute in the manifest).  If you really want to use this API and don't need to support older devices just set the minSdkVersion in your build.gradle or AndroidManifest.xml files.  If your code is deliberately accessing newer APIs, and you have ensured (e.g. with conditional execution) that this code will only ever be called on a supported platform, then you can annotate your class or method with the @TargetApi annotation specifying the local minimum SDK to apply, such as @TargetApi(11), such that this check considers 11 rather than your manifest file's minimum SDK as the required API level.  If you are deliberately setting android: attributes in style definitions, make sure you place this in a values-vNN folder in order to avoid running into runtime conflicts on certain devices where manufacturers have added custom attributes whose ids conflict with the new ones on later platforms.  Similarly, you can use tools:targetApi="11" in an XML file to indicate that the element will only be inflated in an adequate context.

あと、注意事項として、Record Espresso Testを行う場合、
自動生成されるのがjavaファイルなので気を付ける事

ただし、単純にktファイルに変換しても動かないようである
ちょっと調べてみたが、いまいち原因が掴めないため
テストコードだけはjavaで書いた方が楽かも

あと、kotlinでは、イテレーターが使えるため
for(i in 1..9)のような書き方ができる。
これが使えると本当に便利。

あと、下記のようなエラーが出た場合、Rebulidして再度Runをすれば動く

java.lang.RuntimeException: Unable to instantiate application com.aaa.nononaga.voicetimerr.ClassNoticeManager: java.lang.ClassNotFoundException: Didn't find class "com.aaa.nononaga.voicetimerr.ClassNoticeManager" on path: DexPathList[[zip file "/data/app/com.aaa.nononaga.voicetimerr-2/base.apk", zip file "/data/app/com.aaa.nononaga.voicetimerr-2/split_lib_dependencies_apk.apk", zip file "/data/app/com.aaa.nononaga.voicetimerr-2/split_lib_slice_0_apk.apk", zip file "/data/app/com.aaa.nononaga.voicetimerr-2/split_lib_slice_1_apk.apk", zip file "/data/app/com.aaa.nononaga.voicetimerr-2/split_lib_slice_2_apk.apk", zip file "/data/app/com.aaa.nononaga.voicetimerr-2/split_lib_slice_3_apk.apk", zip file "/data/app/com.aaa.nononaga.voicetimerr-2/split_lib_slice_4_apk.apk", zip file "/data/app/com.aaa.nononaga.voicetimerr-2/split_lib_slice_5_apk.apk", zip file "/data/app/com.aaa.nononaga.voicetimerr-2/split_lib_slice_6_apk.apk", zip file "/data/app/com.aaa.nononaga.voicetimerr-2/split_lib_slice_7_apk.apk", zip file "/data/app/com.aaa.nononaga.voicetimerr-2/split_lib_slice_8_apk.apk", zip file "/data/app/com.aaa.nononaga.voicetimerr-2/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/com.aaa.nononaga.voicetimerr-2/lib/arm, /system/lib, /vendor/lib]]

ひとまず、VoiceTimerが一通り動くことは確認できたので今日はここまで

2017年11月2日木曜日

2017-11-01 到達点メモ


*Windows環境での話です

KotlinはAndroidStudio3.0ではデフォルトで入っているはずなのでそこはスルーする

javaフォルダをクリックして、Ctrl + Alt + Shift + Kを同時押しするか
上のメニューバーからCode → Convert Java File to Kotlin File(自分の環境下では一番下にあった。また、変換していると灰色になって選択できない状態になっている)

参考サイト:Kotlin導入
参考サイト:【Android】AndroidのJavaコードをKotlinに変換する

次はプラグインを入れる。これを入れて設定するとわざわざレイアウトファイルでIDを設定すれば、そのまま使えるようになる

Gradleのappの方に、以下の一文を追加する
apply plugin: 'kotlin-android-extensions'
その後同期をしたあとに、各Activityごとに、import kotlinx.android.synthetic.main.activity_main(レイアウト名).*
を書けばよい

参考サイト:Kotlin Android Extensions


変換した際に注意すること

・メソッド名でget~やset~のどちらかを頭にメソッド名としてつけていると
自動的に置き換えられてしまうので注意すること。


*getの場合
変換前:timerNumber.getTimerSec()
変換後:timerNumber!!.timerSec

*setの場合
変換前:timerNumber.setTimerSec(now_sec)//getTimerSec() =
変換後:timerNumber.timerSec = now_sec


・クラスメンバー変数で特に値の代入をしていないと、全部自動的にnullableに置き換えられてしまうので、手動でlateintに置き換えてやる必要がある


今日はここまで。

2017年10月28日土曜日

2017-10-28 到達点メモ


AndroidStudioを2.3から3.0にアップデートした際に本来フォルダ名がresのところをresourceになっている時がある。その場合はGradle自体が古い可能性があるので、それをアップデートすること。

選択して Ctrl + / で選択した部分をコメントアウトすることができる。
参考サイト:Android Studioでのコメントアウトの方法を知りたい
参考サイト:Android Studioでの選択範囲のコメント化とコメント化解除方法

nullableで呼び出した場合、3通りの対応をすることができる

一つは、安全呼び出し

val num: Int? = 1
println(num?.toString())

また、以下のような書き方でもコンパイルが通る。

val num: Int? = 1
println("aaa" + num?.toString())

また、以下のように変数がnullの場合でも、コンパイルは通るが
結果は、『aaanull』になるため、多分良い書き方ではない。

 val num: Int? = null
 println("aaa" + num?.toString())

また、単純に変数の後ろに?をつけてもnullableが解除されるわけではないらしいので
以下のような書き方だと普通にコンパイルエラーが出る

  val num: Int? = 1
  val result: Int = 1 + num?
  println(result.toString())

二つ目は、エルビス演算子です。
nullの時に返す値を指定できます。

変数のみで判別したい場合は以下のように書きます
この際に括弧を忘れると、AAA:nullと表示されるため注意が必要です。
val test: String? = null
val result_string = "AAA:"+ (test ?: "null_string")
println(result_string)


また、変数に付属する関数の返り値がnullかどうかを見たい場合は、以下のように書きます
val num: Int? = null
val result: Int = 1 + (num?.toString() ?: "666").toInt()
println(result.toString())

エルビス演算子は、左側の変数がnullableであることを前提にしてあるので
それ以外の場合だとwarningが出ます

nullを出すこと自体が推奨されないことを考えると
基本はエルビス演算子でnullの値を明示的に指定するべきだと思います。


三つ目は、!!演算子です。

nullableの後ろに!!を付けます。
具体例は以下の通りです

   val num: Int? = 1
   val result: Int = 1 + num!!
   println(result.toString())

これを使うと一番楽ではあるのですが、
そもそもの目的を考えると基本は避けたほうがいいと思います。


参考サイト:Kotlin Null Safetyについて知ろう
参考サイト:【学習kotlinシリーズ】安全呼び出し
参考サイト:最初に押さえておきたいKotlin言語仕様

Runをしようとして以下のようなエラー文が出た場合、
AndroidStudioを一度落として再度立ち上げて、Build->Clean Project
Build->Rebuild Projectをして再度Runをすればうまくいく
*再度立ち上げた後は、Build->Rebuild Projectだけでいいかもしれない

Error:Could not read path (中略)\app\build\intermediates\transforms\instantRunSlicer\debug\(以下省略)

参考サイト:Error:Execution failed for task ':app:processDebugResources'. > java.io.IOException: Could not delete folder “” in android studio

AndroidStudio3.0から、Gradleでapply plugin: 'kotlin-android-extensions'と宣言し、Activiyを使用するktファイルでimport kotlinx.android.synthetic.main.activity_main.*という風な宣言をする必要がなくなった。ただし、自動で生成しないと書かれないのでそこは注意すること

疲れたので今日はここまで


2017年10月21日土曜日

2017-10-21 到達点メモ


以前の続き
初めてのUnity(ユニティ)~初心者のための超入門講座~
【Kotlin】ゼロからはじめる一番やさしいAndroidアプリ開発入門<初めてのアプリ作成からリリースまで>[初級]

◆Blender

押し出しなどで点を選択したい場合は、右クリックをして選択する。


◆終わったので講座の感想

幅広く内容をフォローしているが、初心者を対象と言っておきながら
画面の設定が初期段階と違うのに説明がされてなかったり
そもそも一部見にくかったり、最初に説明すれば無駄に混乱しないのにそうしなかったりと解説講座としては正直作りが甘い。
あと、最後のUnity用語集の説明画面はもうちょっとどうにかならなかったのか?
ただコピペで張った内容しゃべるのだったら、わざわざ講座としてやる意味が無いのでは?
その為、五段階評価で3は出せない。
また、この内容で1を出すのもおかしいので消去方法的に2になる。


◆AndroidStudio

右クリック→New→ActivityからでActivityを作れます。
……知らんかったわ。
Androidアプリをリリースした事がある人が
何で初心者みたいなことを書いているのだろうか……。




その後、作りたいActivityをクリックすると以下の画面がでるのですが



その際に、Activityの名前を変更するだけでレイアウト名も自動で変更されます。
また、アプリを立ち上げた際に最初に起動するActivityに変えたい場合は、
Lacncher Activityにチェックを入れると、変更できます
……知らんかったわ(二度目)
Androidアプリをリリースした事が(以下略)
orz

また、レイアウトの内容を見たい場合は、activity_×××.xmlを開いて
左下のタブのDesignをクリックして、下の画像の赤線で囲ったところをクリックします。




そうすると下の画像のようにウィンドウが出るので、好きなテーマを選んでクリックして
OKをクリックするとそれが適応されます。
余談ですが、AppThemeは自動生成でstyle.xmlで定義された名前です。



……知らんかったわ(三度目)
Androidアプリを(以下略)
本当にAndroidStudioを使いこなせていないorz

xmlのデザイン画面で、TableLayoutなどで複数のボタンや
複数のテキストビューを入れたい場合は
選択してコピーして貼り付けたほうが早い。
またコピー先は自動で連番にしてくれるので被る心配もない


◆Android

講座ではアプリ名は全角7文字だと表示されるとの事だったが
此方のスマホだとアプリ一覧では全角5文字までしか表示されない
フォルダの中だと4文字までになる。
ただし、ホーム画面では全角6文字なら全部表示されるが
全角7文字以上は、6文字以降は省略されていた。
スマホの仕様なのだろうか?
アルファベットだと、10文字目は検証していないが
ホーム画面とアプリ一覧では9文字まで表示される。
なお、私が使っているスマホはAQUOS eaで、バージョンが7.0です。

px,dp,sp
厳密には違うらしいが、pxが実際の大きさで、dpが画像でのスマホの大きさが違くても同じように表示されるように調整された単位で、spがdpの文字バージョンらしい。
正直、大きさはdpを使うぐらいの意識しかなかった。


疲れたので今日はここまで