カテゴリー: OS

『Welcome to Android Basics in Kotlin』をやった(3)

ナビゲーション

画面間を移動する

2. コレクションの詳細

セットの詳細

All of the code above:ってコードじゃなくて"以上のコード全体を次に示します。"みたいな感じの通常文なんじゃないかな?

4. ラムダ式と高階関数の詳細

高階関数

に使用しますしかし 句点抜け。


アクティビティとインテント

5. 明示的インテントを設定する

デスティネーション アクティビティの
わかりにくいな…なんて言えばいいのかな?
呼び出し先アクティビティ? 起動する宛先アクティビティ?

後で取得される名前が指定された
これも若干わかりにくいな
宛先アクティビティで取得する際に使用される名前が指定された…だと冗長か
後で取得される名前(この例ではletter)が指定された
数値や文字列などのデータ(この例ではholder.button.text.toString())も長いか…
intent.putExtra(識別名,データ)とかにするか…

6. DetailActivity を設定する

詳細アクティビティ
DetailActivityを訳しちゃってる感じ?

コンパニオンオブジェクトってなんか不思議な存在のような…
クラス変数(定数?)とどう違うのか…
コンパニオンオブジェクトを何処に含めるべきかとか考えちゃうと昔ながらの定数記述用のクラスを用意にしちゃったりしても大差ないような気もするけど、importの有無が出てくるのかな?

companion object vs. top-level

うーん、まあ今の俺氏のレベルでは深く気にすることはないようだな(ノ∀`)
つーか多分この先も俺氏のレベルだとそんなに気にすることはなさそうw


9. メニューボタンを実装する

線形レイアウト マネージャー
リニアレイアウトマネージャーの方がまだわかりやすいかな。

否定します
切り替えますとかでええんでないのかな?

注: onCreate() メソッドをオーバーライドする場合、アクティビティの作成を完了するにはスーパークラスの実装を呼び出す必要があります。そのため、このメソッド内ですぐに super.onCreate() を呼び出します。他のライフサイクル コールバック メソッドについても同じことが言えます。

へぇ、そういうことだったんかい(・∀・) 

コードではBundleはnull許容になってる?

注: アクティビティが再作成されている場合、onRestoreInstanceState() コールバックは、onStart() の後にバンドルとともに呼び出されます。ほとんどの場合、onCreate() でアクティビティの状態を復元します。ただし、onRestoreInstanceState() は onStart() の後に呼び出されるため、onCreate() を呼び出した後で状態を復元する必要がある場合は、onRestoreInstanceState() を使用できます。

ふーむ。

おかしいな、画面回転後、デザートの絵は保持されるのに、デザート数と金額が0になる。
クリックすると正しい(?)累積数、累積金額になるんだけども。
描画の更新とかしないといけないのかな…
なんかやり方間違えたか?

わかったw
"binding 変数の設定の後に追加します。"ってあったから一番最後に追加しちゃったけど、
"// Set the TextViews to the right values"の前に貼らないと
バインディングされてるTextViewに値を代入しないわけだな(ノ∀`)


フラグメントとナビゲーション コンポーネント

3. フラグメントとフラグメント ライフサイクル

フラグメント ライフサイクル

"fragments can be initialized and removed from memory"
フラグメントは初期化してメモリから削除できます。
これは違うよねw
初期化及び削除することができます。の方が妥当だよね。

"Also, just like activities, fragments have a lifecycle with several states,"
また、アクティビティと同様に、フラグメントには複数の状態を持つライフサイクルがあり
"複数の"だと同時に状態を複数持つという意味にも取れそうで微妙だな。
"数種の"がいいか…うーむ…
Alsoだからアクティビティと同様に、フラグメントにも数種の状態を持つライフサイクルがありかな?


6. DetailActivity を WordListFragment に変換する

onClickListener() の LetterAdapter LetterAdapterのonClickListener()?

LetterListFragmentのonCreateViewでval view = binding.rootreturn binding.root

なんでbuild.gradleってプロジェクト用とモジュール用に分かれてるんだろうな(´・ω・`)
つーか分かれてるなら名前を変える方が良さそうだけども…

或いはエディタ上では単一のファイルのように見せかけるとか…
説明文だとアプリレベルってあるけどIDE上だと"モジュール:Words.app"と表示されていてわかりにくいし。

つーかこの辺のgradleファイルの編集についてもIDEが良きに計らってくれないもんだろうか。

可能性のあるデスティネーション possible destinationsって上で言っている、
移動できる「デスティネーション」a possible "destination" that can be navigated to.の省略なんだろうな。 どっちもあれだな…"移動可能な"辺りかな?

layout_height 属性と layout_width 属性の下に
layout_height 属性との部分は不要ではなかろうか?


8. ナビゲーション グラフの使用

ナビゲーション グラフをセットアップする

なんか操作を間違えたのか、ナビゲーショングラフには表示されていない。
これは自分で追加していかないといけないのか?
だとすると画像が一つ飛んでるのではなかろうか…
画面左上という表現も微妙だな。デザインペイン(?)の左上とか言わないと一瞬悩むだろう…

setupActionBarWithNavController(navController)ってないな…(´・ω・`)
setupActionBarWithNavController(this,navController)の方にしてみたが…

フラグメントとナビゲーション絡みはきちんと解説ページを読まないと把握できそうにないな(ノ∀`)


ViewModel にデータを保存する

2. スターター アプリの概要

ゲームの概要

ぐぐってみたがアーキテクチャという言葉の定義がいまいちわかりにくい(´・ω・`)
何となくわかったような気がするが、なんかコンテキストによって意味が若干変わりそうな感じがして曖昧モコモコである…

4. ViewModel を追加する

viewModelsへのプロパティ移譲も若干わかりにくい…
コード上の変数名viewModelだと紛らわしいからgameViewModelとかにしといてくれたら良かったのにな。

6. ViewModel のライフサイクル

4.onCreateView() 内の GameFragment
ここも逆かな?

7. ViewModel を設定する

次の単語を取得する

currentWord.

currentWord = allWordsList.random()
val tempWord = currentWord.toCharArray()
tempWord.shuffle()

while (tempWord.toString().equals(currentWord, false)) {
    tempWord.shuffle()
}

ってコード、本当に動く(´・ω・`)?

tempWord.toString()じゃなくて、String(tempWord)とかtempWord.joinToString("")じゃないとうちでは動かない。

issuesには53と58と72で上がってるっぽいねぇ


ヘルパー メソッドを追加する

nextWord().

8. ダイアログ

アラート ダイアログの構造

⑤の説明は?

後置ラムダ構文ってちょっと勘違いしそうだな(´・ω・`)
引数関数とは思い難い。波括弧後の"."が少し受け入れがたいw

private fun getNextScrambledWord()って不要じゃないか? ← 一番最後で消してた

9. Submit ボタンの OnClickListener を実装する

スクランブルされた単語を表示する

onSubmitWord() ない

スターター コード内のコード スニペット

GameFragment,

ViewModelでLiveDataを使用する

LiveData.

4. 現在のスクランブルされた単語に LiveData を追加する

LiveData,

currentScrambledWord LiveData のオブザーバー
を入れるか、LiveDataが不要?

6. オブザーバーをスコアと単語数に接続する

ステップ 2: オブザーバーをスコアと単語数に接続する

onViewCreated()メソッドの最後にあるGameFragmentで
currentWordCount LiveData  ← この2つは何を指摘しているのか思い出せない(ノ∀`)

LiveDataオブザーバーもバインディング式も便利でええのぅ(・∀・)

TalkBackはまた飛ばす。

『Welcome to Android Basics in Kotlin』をやった(2)

Layouts

Kotlinのクラスと継承

2. クラス階層とは

一応、"豆類"のところのリンクがhttps://en.wikipedia.org/wiki/Legumeだから分かるけど
Legume(マメ科植物)って注釈を入れてくれないとAnimalクラスを例にしたパターンよりも分かりづらいなw

Lentilレンズ豆Chickpeaひよこ豆もわかんねw 世界共通でわかりやすい例を上げるべきだなw

3. 基本クラスを作成する

Dwelling 住居

5. 階層内のクラスを変更する

床面積を計算する

open class RoundHut(
   val residents: Int,
   val radius: Double) : Dwelling(residents) {

突然 residentsにvalをつけてるが何か意味あんのかな? ←※ これ、何の話をしてるのか自分で思考を遡れない(ノ∀`)


Android用のXMLレイアウトを作成する

3. XMLを読んで理解する

xmlnsはXML名前空間を表し、各行はスキーマ(これらの単語に関連する属性の語彙)を定義しています。たとえば、android:名前空間は、Android システムによって定義されている属性を示します。レイアウトXMLのすべての属性が、それらの名前空間のいずれかで始まります。

何言ってるかよくわからない(´・ω・`)
xmlnsってなんだっけ…

xml名前空間name spaceか。
ああ、後に続く単語が所属する属性ということか。
よりわかりやすく言えば、あるプログラム内に同じ名前を持つ要素が複数存在した場合に発生する名前衝突を避ける為の一意的接頭辞としてのURIを名前空間として指定してるって感じか。

xmlnsで指定する名前空間名、android,app,toolsは通例的やコーディングルール的なものでシステム的に指定されているわけではないのかな?
#32 AndroidのXMLのxmlnsとは?
URL と URI の違い
なぜこの行xmlns:Android = "http://schemas.Android.com/apk/res/Android"がレイアウトxmlファイルの最初でなければならないのですか?

厳密に言うと違うけれども、Javaで行っているimportを最上位のコンテナで宣言してるみたいなもんだな。

android属性の値は監視されているのか、変更すると

In Gradle projects, always use http://schemas.android.com/apk/res-auto for custom attributes

Unexpected namespace URI bound to the "android" prefix, was http://schemas.android.com/apk/res/and, expected http://schemas.android.com/apk/res/android

みたいなエラーが出る。

app属性のhttp://schemas.android.com/apk/res-autoを変更するとエラーにはならないが、app属性で指定してるものは動かないのでconstraint等が機能せずに、期待した表示にはならないのか。真っ白しろすけやで(・∀・)

tools属性は

Android Studio では tools 名前空間でさまざまな XML 属性がサポートされており、これを使用して設計時の機能(フラグメントに表示するレイアウトの選択など)やコンパイル時の動作(XML リソースに適用する圧縮モードの選択など)を有効にできます。これらの XML 属性はアプリのビルド時にビルドツールによって削除されるため、APK のサイズと実行時の動作には影響しません。

ということでまさにツール的な感じ…

この辺はAndroid StudioというかGradleの方で決められてるURIってことなのかな?
変更できたりするんだろうな、そうでなかったらデフォルト値として書かせる必要はないもんな。でもなんでマニフェストファイルのルートかなんかでその宣言をしたら、下位と言えるそのアプリ内のレイアウトファイル等で宣言せずに使えるようにしてないんだろうか? レイアウトファイルの独立性というか他アプリへの流用の為?

なんでConstraintLayoutの時に"android:layout_width"に
"parent"を指定したら、内部で自動で0dp、
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
にするみたいにしなかったんだろう?


チップを計算する

4. チップを計算する

チップを計算して、その端数を切り上げる

"For a `Switch` element, you can check the `isChecked` attribute to see if the switch is "on"."
の部分がコードみたいに表示されてるのはなぜなんだぜ(´・ω・`)?

ceil()

8. 概要

Null は「値なし」を意味します。
null の値を処理できないコードもあるため、使用するときは注意してください。
大文字と小文字の違いはなんだっけ(´・ω・`)?
ただの記述ミス?


アプリアイコンを変更する

1. 準備

ランチャーとは、Android デバイスでホームボタンを押してアプリの表示と整理を行う場合や、ウィジェットとショートカットを追加する場合などのエクスペリエンスのことです。

何言ってっるっか、わがんね(´・ω・`)

6. アプリアイコンを変更する

"3.Android Studio の Image Asset Studio ツールが開きます。"の後の
4.5.6.のインテントというかデプスが間違ってて、数字がおかしくなってる?

ベクター型ドローアブル ファイルを-v26ディレクトリに移動する

"Source set: main(デフォルト値をそのまま残します)"
なんか"Source set"の欄がなかった。選択が違うと表示される?

"4.ic_launcher_background.xml ファイルを左クリックして、[drawable-v24] フォルダから [drawable-anydpi-v26] フォルダにドラッグします。"
作業をミスったのか、[drawable-v24]じゃなくて[drawable]フォルダ内におったわ


より洗練されたユーザー エクスペリエンスを作成する

3. マテリアル コンポーネント

テキスト フィールド

まだ EditText を削除していないため、次の属性を EditText から切り取って貼り付け、TextInputLayout に配置します: 制約、リソース ID(cost_of_service)、レイアウトの幅(160dp)、レイアウトの高さ(wrap_content)、チップのテキスト(@string/cost_of_service)。

制約って言う書き方だと見落とすな。長いから省略したんだろうけれども。
つーか意味を掴みづらいと思う。"layout_constraint~"とか各constraintとか制約(constraint)と表記した方がいいな。

5 TextInputEditText.cost_of_service_edit_text.の"."が余計。

スイッチのところでも"."が余計

com.google.android.material.switchmaterial.SwitchMaterial.

5. スタイルとテーマ

android:minHeight,android:gravity,および android:textAppearance.に","と"."が余計。

スタイルをテーマに追加する

View.に"."が余計。

daytimeとnightモード用のxml内の構成要素を意図的に変更していない場合、themes.xmlに追加したら、nightモード用のxmlがある場合は自動的にnightの方にも追加されてもいいような気がしないでもない。daytime用xmlとそのnight差分と言う形でnight用xmlを自動生成するような。

6. ユーザーエクスペリエンスの向上

Enter キーでキーボードを非表示にする

下記のヘルパーメソッドをコピーしてMainActivity クラスに貼り付けます。MainActivity クラスの右中かっこの直前に挿入できます。

めっちゃわかりにくいw

下記のヘルパーメソッドをコピーしてMainActivityクラスの末尾に貼り付けます。

くらいでいいんじゃないかな。

binding.costOfServiceEditText.
binding.calculateButton.setOnClickListener { calculateTip() }.
view, keyCode, _ -> handleKeyEvent(view, keyCode).
TalkBackは飛ばした(ノ∀`)


Kotlinでリストを使用する

4. リストをループする

while ループ

注のところの"除算"のところがスラッシュじゃなくてバックスラッシュになってる?

5. すべてをまとめる

"by passing in "Noodles" as the name and the price of 10."

name と price を 10 として "Noodles" を渡すことで

なんか翻訳がおかしいな…

nameとしての"Noodles"とpriceの10を渡すことで

辺りかな?

toString() メソッドをオーバーライドする

When you print an object instance to the output
ここは出力じゃなくて逆にprintのままの方が意味が通じやすいんじゃなかろうか。或いは画面出力とか。今までもあったけど、単純にprintを"出力"に訳しちゃうと出力が持つ多義が理解の妨げを誘発するよね(´・ω・`)

なんでItemクラスでtoStringをオーバーライドしないんやろ。

みんな大好き可変長引数はvarargを使うのか。 ← お前が好きなだけや(・∀・)


RecyclerView を使用してスクロール可能なリストを表示する

3.データのリストのセットアップ

Affirmation データクラスを作成する

stringResourceIdは紛らわしくないかな?
文字列リソースのIdというのは間違いないが、この命名はstring型のリソースIdと誤解されそう。
AffirmationResourceIdでいいんじゃ?

4. アプリに RecyclerView を追加する

RecyclerView のアダプタを実装する

RecyclerView.

ViewHolder を作成する

ItemAdapter の右波かっこの前で

あれ? 今まで"中かっこ"って表記してたのに、なぜここで急に"波かっこ"にw

RecyclerViewViewHolder のサブクラスにして
"."抜け

この辺のAdapterとViewHolderの話からよくわからなくなってくる(ノ∀`)
これはある程度使い方に慣れるか、ソースを見ないとピンと来ないかもw


カードを使用して画像の一覧を表示する

2.リストアイテムに画像を追加する

ImageViewをリストアイテムのレイアウトに追加する

LinearLayout,
TextView,
centerCrop.

ItemAdapter を更新して画像を設定する

imageView.

3.UIの改良

カードを使用する

LinearLayout.

リソース アノテーションなんてものがあるんだねぇ…

あれ…?
今までクイズはずっと英語だったのに、ここから日本語に?
単純に今までも日本語に出来たのかな?

1問目 mutableでもミュータブルでもない…だと……( ;・´ω・`)ゴクリッ
7問目もnum in numbersじゃないのか…

『Welcome to Android Basics in Kotlin』をやった(1)

kotlinの学習ついでにAndroidについての復習をしようとWelcome to Android Basics in Kotlinをやった。全部で4単元あった。中々のボリュームであった。

我が家のネットワーク環境の遅さ等も足を引っ張り、読み進むのに時間がかかった。最後までやったけど、きちんと理解し記憶しているかと言えば微妙(ノ∀`)
今後の学習をする際に手や足を掛けていけそうな単語等の知識と言語経験を得た感じくらいかな。

以下はその際のメモ書き、主に自動翻訳に対するケチやハマったことの単純な記録を少し修正したものなので、余り有用な内容ではない。

いつものことだが、時間が多少経ってしまっているが為に自分でも何の話をしているのかはよくわからない部分がある(ノ∀`)


全般的に思ったこと。

  • ナビゲーター(喋る人)が複数居て、なんか観てて面倒くさい。なぜ複数の人の顔や声という余計な情報を垂れ流すのだろうか。後の単元では一人だけの動画になったりしたが、正直、学習系動画は声とコードや画面映像だけで良いと思う(´・ω・`) ← ノリについていけないだけとも言うw
  • 括弧の表記がぶれているのはいただけない。"{}"を中括弧と呼んだり波括弧と呼んだり。個人的には波括弧で統一して欲しかった。"[]"を角括弧として表記しているので。あと文中では"かっこ"だけど"括弧"または"カッコ"の方がいいかなぁ?
  • "タスク"は"処理"と表現した方が良いような。或いは"タスク"とは何かという説明を先にした方が良いような。一応初心者向けコースなので。

Introduction to Kotlin

コードラボが中々始まらない。
考えてみれば最初のログインの時も無茶苦茶時間がかかったような。うちの回線の問題なんだろうか? コードラボ自体は日本語化されてる模様。
← 最後のテストが日本語の時と英語の時があった。言語設定が上手く機能していなかっただけだろうか?

Kotlin で初めてのプログラムを作成する

3.プログラムを変更する

関数とは、特定のタスクを実行するプログラムのセクションのことです。

関数とは、特定の処理を実行するプログラムの部品(一部分)のことです。

の方が良いかなぁ…

mainは、この関数の名前です。関数には名前があり、それによってお互いを区別します。この関数は、プログラムを実行すると最初に呼び出される、つまりメインの関数であるため、main と呼ばれます。すべてのKotlinプログラムには、mainという名前の関数が必要です。

関数は名前を持ち、それによって区別されます。この関数の名前はmainであることを意味しています。mainの名前を持つ関数はKotlinでプログラムの実行時に最初に呼び出される特別な関数です。必ずプログラム内に存在しなければいけません。

※後々の匿名関数の説明を踏まえると基本的に関数は名前を持ち、または関数には名前をつけて他の関数と区別して使用することができます。という表現の方が妥当か?

println で、テキスト行を出力するようシステムに指示します。

printlnという命令文でテキストを画面に出力するようにシステムに指示します。 このprintlnという命令文(の中身)はKotlinで提供されている定義済の関数です。

あと、ここで"println 命令"という表現というか翻訳をしてしまっているな…


4.プログラムを拡張する

いきなり println() functionという表現が出てくるので、やはり上のような説明の追加かfunction関数と表記というか翻訳すべきでは?

ただは要らないか、前回のサンプルでは一行の命令行しかありませんでしたが、かなぁ…

フィードバック機能というよりもエラー通知機能とかの方がわかりやすいかなぁ?

ミスコーディングミスとかの表現の方がいいかな。

Error という単語を含むメッセージが表示されます。
含んでないで(ノ∀`)


6.

すべてのKotlinプログラムにでもいいんだけどにはの方が良いかな…どうかな…これは個人の好き好きかw

テキスト行を出力するには、println() 関数を使用します。
複数のテキスト行を出力するには、println() 命令を繰り返します。
関数と命令と言う異なる単語を使う意味はなんだろうか? ← 原文がfunctionとinstructionだった。repeatを使った表現だからかな?
やはり関数呼び出し=システムへの指示・命令であることを先に明確に説明すべきなのではないかな。あとは命令文=ステートメントとか。

まあ何にせよ、初心者向けの学習教材では単語とか表現は出来るだけ統一して、本筋の知識の習得を妨げない方が良さそうだけどねぇ… 

対象が初心者ではなくて初級者なら、その知識を広げるための覗き穴を設けることは賛成だけれども。


Kotlin で誕生日メッセージを作成する

2. Kotlin で誕生日メッセージを作成する

スターター コードを設定する

2. fun main() 関数内のテキスト "Hello, world!" を "Happy Birthday, Rover!" に置き換えます。

2.main関数内にあるprintln命令の引数である"Hello, world!"を"Happy Birthday, Rover!"に置き換えます。

"引数"の説明って既に出てたかどうか忘れた(ノ∀`)

3.その下の中かっこ内に、出力用の "You are already 5!" と "5 is the very best age to celebrate!". の 2 行を追加します。

"3. そのprintln命令の下に、新たに"You are already 5!"と"5 is the very best age to celebrate!"の 2 行を出力するためのprintln命令を追加します。"

バースデーケーキを追加する

画像が必要ですでもいいけど、イメージなどが一緒にあるといいでしょうくらいでいいんじゃね( ゜σ・゚)ホジホジ?

キーボードと println() で文字と記号を何行か出力すると、誕生日メッセージにケーキを追加できます。キーボードとの部分は要るかね?

ステートメントという言葉の説明はしてたっけ?
突然出てくるような。

以下の print ステートメントの行を追加します。とあるが、printとprintlnは違う物だと思う…

もしかすると以下の出力ステートメントの行を追加します。が正しい翻訳?

「ローバーの年齢を変数に格納する」辺りの説明で色々と文章にケチをつけたくなったが、もう面倒くさいのでそれはやめた。日本語としておかしいというか説明文としては言葉足らずでわかりにくい。原文自体の表現が微妙だったり、翻訳が微妙だったりする感じを受ける。

※以降、徐々に気力を失って細かい指摘が少なくなっていく模様w


4. 枠線付きの誕生日バナーを出力する

枠線を出力する関数を作成する

funキーワードは特定のコードを関数としてマークします。

funキーワードは特定のコードを関数として分離する為に使用します。

funキーワードの後は、関数名、関数への任意入力のためのかっこ(引数)、中かっこの順に記述します。

関数名、丸括弧、波括弧の順に記述します。
丸括弧内には処理で必要となる情報(=引数)を記述し、波括弧内にはその関数内で行う処理を記述します。

テキストを出力するためのコードは、常にこの中かっこ内に記述します。

テキストを出力する為のコードは、処理に当たるので、この波括弧に記述します。

関数を変更して2つの引数を指定する

なんか記述にミスがあるのか文章がおかしい。
英語と日本語が混在している?


基本レイアウト

Androidアプリに画像を追加する

4.適切なコーディング慣習の採用

警告アイコンをクリックしてもFix用のWindowが表示されない…
なんか設定を変えてしまったかな?
問題ウィンドウからクィックフィックスの表示で"文字列リソースの抽出"をクリックしたが、これまた反応がない。values/string.xmlにも追加されていない…
なんじゃらほい(´・ω・`)
うちのAndroid Studioの設定がおかしいんかな?

The type of ViewGroup that helps you arrange the views inside of it in a flexible way is called a

が分からなかった。Layoutとか答えちゃった(ノ∀`)
ごっぐる翻訳を使ったのに問題文を理解できてないんだなw
RelativeLayoutとかなのか(´・ω・`)?
← 何の話かと思ったら空欄記述問題の話か…

Kotlinのクラスとオブジェクトインスタンス

カプセル化の説明ってこれでいいんだろうか?
厳密には微妙に違うような…

キャメルケースにも先頭も大文字にするアッパーキャメルケース(UCC)ってあるんだな…ってこれはパスカルケースって呼ばれる方が普通なのかと思ってたわ(´・ω・`)

一般的(?)な先頭小文字の場合はローワーキャメルケース(LCC)って言うのか…

コンストラクタ引数ってそのままプロパティになるんかΣ(゚∀゚;)ベンリ


インタラクティブなDice Rollerアプリを作成する

4. アクティビティの概要

onCreate() メソッドの残りの部分では、インポートのコードを使用し、setContentView() で開始レイアウトを設定することにより、MainActivity を設定しています。

何言ってるかわからんw

6. サイコロを振るためのロジックを追加する

rollDice() メソッドを作成する

クリック リスナーでテキストを「6」に設定しているコードを、rollDice()の呼び出しに置き換えます。

何の話をしてるんだ…( ;・´ω・`)ゴクリッ?
Toastの部分の話をしてるんだろうけれど…
他のプラットフォーム用のチュートリアルを流用したのか、以前はテキストボックスに"6"を代入していたのかな。


Kotlinで条件付き動作を追加する

2. コード内での意思決定

変数 num を作成し、5. に設定します。
「num は 4, より大きい(>)」

翻訳が原文の"."や","を含んでしまってる?

考えてみると"The variable is greater than ~"ってなんか変だな…
valueじゃないのか?

numは前のコードを流用して

val num = (1..6).random()

とかの方が良いな。

3. Lucky Dice Roll ゲームを作成する

スターター コードを設定する

diceRollrollResultに直してないなw

6. 適切なコーディング慣習を採用する

実用的な起動体験を構築する

ユーザーに奇妙が印象を与えます。
奇妙な?

A class is for defining categories of "things", while instances are for defining their properties.
なんか違うと言えば違うような気がする。間違いだった(ノ∀`)

Use // to turn the rest of a function into a comment.
これ、関数の残りの全行に対して//を施せばそれはそれで正解のような?


長い(ヽ'ω`)

うにのトゲは刺さると痛い(´・ω・`)-40 : Javaプラグインの利用 (Java側)

きっと他のことをやって全てを忘れてしまう未来の俺氏へのUnityで自作Javaプラグインを利用する時のJava側手順。

何故か他の人のコードを実行しようとすると上手く行かなかったので、Unity側から文字列を渡して、それにJava側が文字列を付加して返すという簡単なものにした(´・ω・`)

面倒だったのでAndroid10決め打ちにした。
日本語化が上手く行ってないのか、メニュー等がなんか中途半端な状態になっているw

参考サイトというか目を通したり試したエントリはたくさんあるのだが、ブックマークに残っていたのは下の3つくらいだった(ノ∀`)マタヤラカシタ
Unityのプラグインを作るAndroid/iOS
[Android]Unityへ組み込むAndroidライブラリビルド手順解説
突然仕事でUnity向けのSDKやPluginを作ることになった人向け資料<Android実践編>


他の人のエントリを色々読み、理解せずにやっていたから気が付かなかったが、手順8~11のUnityのClass.jarのコピーにまつわる作業は、Java側でUnityPlayerActivity等をいじったりしない場合は必要ない気がする…( ・´ω・`)トバシテイイ


  1. Android Studioを起動し、[Create New Project]をクリック。
  2. [No Activity]を選択し<次へ>をクリック。
    ※目的はモジュール作成の為、実際にはActivityは何を選んでも問題はない筈。

  3. 任意のプロジェクト名を指定し、[Minimum SDK]で"API 29 Android 10.0"を選択し、<終了>をクリック。
    ※うちの実機はAndroid10なのでこの選択をしているが、必ずしも10でなければならないわけではない。但し、他のバージョンでは動作確認をしていない。
  4. プロジェクトの作成が終わったら、[ファイル]-[New]-[New Module]の順に選択。
  5. [Android Library]を選択し、<次へ>をクリック。
  6. [Module Name]に任意の名前を指定、[Minimum SDK]で"API 29 Android 10.0"を選択し、<終了>をクリック。
    ※この例では[Module Name]を"UniAndLib"に指定。
  7. <プロジェクト>プルダウンをクリックし、"プロジェクト"をクリック。
  8. 使用する予定のバージョンのUnityのフォルダで"Class.jar"をコピー。
    この例ではUnity Hubを使用し、バージョン 2020.2.4f1 を使用。かつmonoではなくil2cppでビルド。
    "C:\Program Files\Unity\Hub\Editor\2020.2.4f1\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\il2cpp\Release\Classes"

    カスタムインストール時は当然のことながら、Class.jarの在り処は変わってくる。

  9. Android Studioのプロジェクトの新しく追加したモジュール配下のlibsフォルダに貼り付け。
  10. ダイアログが表示されたら、<リファクタリング>をクリック。
  11. 新しく追加したモジュール配下のbuild.gradleをダブルクリック。
  12. build.gradleが表示されたら、dependenciesの箇所に
    compileOnly fileTree(dir: 'libs', include: ['*.jar'])
    compile 'androidx.appcompat:appcompat:1.1.0'
    

    を追加。

    これを追加しておかないと、"Execution failed for task ':launcher:checkDebugDuplicateClasses'"とかいうエラーが出る筈。Android Studioで作ったライブラリ側とUnity側にUnityのClass.jarが存在しちゃって、その辺がいけないらしい…

    ※compileのところに打ち消し線が出るのでDeprecatedかなにかなのかもしれないがキニシナイ( ゚ 3 ゚)
    もしかしたらそもそも必要ないのかな? よくよく見ると下の行で"appcompat:1.2.0"をimplementationしてるから要らないか?

  13. 新しく追加したモジュール配下の[src]-[main]--[パッケージ名]のフォルダを右クリックし、コンテキストメニューが表示されたら、[新規]-[クラス]の順に選択。

  14. 「New Java Class」ダイアログが表示されたら、クラス名を指定し、"Class"をクリック。
    ※この例ではクラス名に"ReturnString"を指定。
  15. 作成したクラスがエディタに表示されたら、以下の内容を入力して保存。
    package com.example.uniandlib;
    
    public class ReturnString {
        public String returnResult(String fromUnity) {
            return "Via Java Lib:\n" + fromUnity;
        }
    }
    

    (パッケージ名やクラス名を任意の値を指定している場合は適宜書き換える。)

  16. メニューで[ビルド]-[Rebuild Project]の順に選択。
  17. ビルドが終了するまで待つ。
    (ウィンドウ下のステータスバーで以下のようなの表示がされている間はビルド実行中。)

以上がUnityで使用できるJavaプラグインの作成方法。

画像を入れたら長くなりすぎたので、Unity側は次のエントリで…(ヽ'ω`)


CommandInvokationFailure: Gradle build failed.

このエラーが出た場合は、一回エクスポートして、Android Studio側でインポートしてGradleをアップグレードしないといけないとかどうとか。

参考:
Gradle build failedが出る(Unity2019から)