カテゴリー: IDE・ツール・ライブラリ関連

『Android Kotlin Fundamentals』をやった(1)

Android Kotlin の基礎のための Codelab

と言いつつ、まだ途中(ノ∀`)
まだLesson4までしか終わってない。

『Welcome to Android Basics in Kotlin』と異なり、英文で内容もちょっと長いかな? あと若干前の内容っぽい。英文なので読むのに時間がかかるが、知りたいことというか途中で浮かんでくる疑問を即座に説明してくれてたりするので、読む価値はあると思う。

途中でこの内容(というかcodelab全般?)翻訳・公開しているサイトを発見したが、英文で読む方に慣れてしまったがためにそのまま英文で読み進めることにした。

最近、英文を全く読まなくなっているので少しは読まないといけない気がするし…

いつものように、やっている最中の適当なメモ書きや感想であり、勘違い、おま環由来の問題等々で大騒ぎしている記録である(ノ∀`)


thus far これまでに 今までに
terminology 用語
unambiguous 明確な
complicate 複雑にする, わかりにくくする
sheer 全く, 単なる 形容詞 純然たる, 全くの
the sheer number of の膨大な数
inevitably 必然的に
radically 根本的に
underneath 下に

なんでView groupでchild viewのhorizontal positionを一括指定出来ないんだろうか?

All the view IDs in your XML file must have this prefix..
ピリオドが一つ余計。

Use the findViewById() method to get a View reference for the view that you defined in the XML class.
この場合のclassって何を指してるんだろうか?
fileじゃいけないのか?

the duration to show the message.
先頭が大文字になっていない。

The show() method at the end displays the toast.
は<li>というか<ul>外に書くべき?


Android Kotlin Fundamentals 01.3: Image resources and compatibility

Step 1: Add the images

項番3と4が2から分かれていない。
previewタブはない?

performantなんて単語あるんだな…
と思ったが、よくよく考えてみると、importancetとimportantの語形変化と一緒だな(ノ∀`) performanceの形容詞形か。


性能[行為・パフォーマンス]の
〈俗〉《コ》高性能の、効率の良い

store the View object in a field.
Kotlinにはフィールドはないと言ってたけど、それは意味が違うのかな(´・ω・`)?


5. Task: Use a default image

項番4が3から分かれていない。

The tools namespace is used when you want to define placeholder content that is only used in the preview or the design editor in Android Studio. Attributes using the tools namespace are removed when you compile the app.

ふーむ、ふーむ(・∀・)
Tools名前空間をつけた値は開発時のプレースホルダーでコンパイル時には除去されるんだな。

Namespaces are used to help resolve ambiguity when referring to attributes that have the same name.

名前空間自体は名前衝突というかコンパイラが名前で迷わないためのプレフィックスってことでええんかな?


6. Task: Understand API levels and compatibility

Step 1: Explore API levels

項番1と2が分かれていない。

Step 3: Add compatibility for vector drawables

項番1と2が分かれていない。

The app namespace is for attributes that come from either your custom code or from libraries and not the core Android framework.

なるほど、app属性は自分のカスタムコードや標準(?)のAndroidフレームワーク以外のライブラリコード由来の属性の為のものなのか。


9.Summary

Summaryのところでもっと綺麗にまとめてあった(ノ∀`)

The tools namespace for design-time attributes:
Use the tools namespace in the Android layout file to create placeholder content or hints for layout in Android Studio. Data declared by tools attributes is not used in the final app.

The app namespace:
The app namespace in your XML layout file is for attributes that come from either your custom code or from libraries, not from the core Android framework.


Android Kotlin Fundamentals 01.4: Learn to help yourself

3. Task: Use project templates

最初間違えてempty Activityでプロジェクトを作ってしまい、一瞬戸惑う(ノ∀`)
次にBasicで作ったつもりだったが、なんか出来上がった画面が違うような…

フラグメントとボタンが使われていて、TextViewの文言もなんか違う。
バージョンによる違いかな?まあ大した問題でもないからいいか。

color.xmlにcolorAccentがない?


4. Task: Learn from sample code

dagger.hilt.android.AndroidEntryPoint
なんだこのアノテーション…

Hilt は Android 用の依存関係インジェクション ライブラリです。これを使うことで、プロジェクトで依存関係の注入(DI)を手動で行うためのボイラープレートが減ります。手動で依存関係の注入を行うには、すべてのクラスとその依存関係を手作業で作成し、コンテナを使用して依存関係の再利用と管理を行う必要があります。

Hilt は、プロジェクト内のすべての Android クラスにコンテナを提供し、そのライフサイクルを自動で管理することで、アプリケーションで DI を行うための標準的な方法を提供します。Hilt は、よく知られた DI ライブラリである Dagger の上に構築されているため、コンパイル時の正確性、実行時のパフォーマンス、スケーラビリティ、Android Studio のサポートといった Dagger の恩恵を受けられます。詳細については、Hilt と Dagger をご覧ください。Hilt

Dagger is a fully static, compile-time dependency injection framework for Java, Kotlin, and Android.

ふーん(´・ω・`)
この場合の依存関係の注入って@AndroidEntryPointでGardenActivityに各Fragmentを結びつけてるのか…?
と思いきや、

@AndroidEntryPoint は、プロジェクト内の Android クラスごとに個別の Hilt コンポーネントを生成します。これらのコンポーネントは、コンポーネント階層で説明されているように、それぞれの親クラスから依存関係を受け取ることができます。

依存関係を注入したいコンポーネント全てに引っ付けるのかな?
まあ取り敢えずはこのくらいの理解でいいかw

Changing the launcher icon
項番4,5が改行されていない

日本語化してるから、その差分かもしれないがLegacyタブはなくてオプションタブだった。そもそもAPIバージョンをほぼ最新にしてるからその影響かもしれないがよくわからないw


Android Kotlin Fundamentals: LinearLayout using the Layout Editor

3. Task: Create the AboutMe Project

新規プロジェクト作成ダイアログに"This project will support instant apps"という項目がないな。


5. Task: Add a TextView using Layout Editor

Layout Editorの表示属性切り替えのアイコンってどれだ…
一応下までスクロールすると全属性が表示されるからまあいいか。

項番3,6,7が改行されていない。

Attributeでは大文字の"ID"だけどLayoutEditorだと"id"だな。
textColorの変更がよくわからなかったので@color/blackをGUIから選択した。
→後でstyles.xmlを直接編集したけど、GUIから指定する方法がわからなかったな(ノ∀`)


6. Task: Style your TextView

「Right/left versus start/end」の

Add "start" and end" in addition to "left" and "right".
For example, use both android:paddingLeft and android:paddingStart.

で一瞬悩む。これは"left"や"right"に"start"や"end"を追加するっていうんじゃなくて、"left"や"right"に加えて"start"や"end"も使えるよって話なのかな?

項番7の改行がない。

Step 3: Add a font

robotoフォントの追加手順は3,4を変えるべきでは?
画面配置が逆なので、非常に微妙ながらも逆流手順に思える。

A style is a collection of attributes that specify the appearance and format for a view.

スタイルはビューの外観やフォーマットを指定する属性のコレクションであると…φ(・ω・` )メモメモ…


7. Task: Add an ImageView

6.To rename the id of the ImageView, right-click on "@+id/imageView" and select Refactor > Rename.

の通りにするとThe resource name must start with a letterというエラーが出てリファクタリング出来ない。"@+id"は自動補完されるのか、除去して残りの"star_image"だけ入力すればいいのかな。

項番10でOKは二回クリックする必要があるか?

星マーク(アスタリスク?)2つは何を意味してるんだっけか…

最近、適当にやって、色々やらかしたミスや雑多な作業の記録(ノ∀`)

各項目、がっつりと掘れば、エントリ化の意義も出てこなくもないが、そこまで興味がなかったり、面倒くさいので、適当な羅列と雑記で済ます(ノ∀`)

そのまま忘却の彼方に追いやるのも悪くはないが、雑多なことと軽んじて記録しておかないと後で苦労することが多いのでw


  • セマンティックの観点からブログ内のタグの書き換えをしようと思う( ゜σ・゚)ホジホジ 意味はよくわかっていない。
     
    => "Search Regex"プラグインで<hr/>とか<br/>の最後のスラッシュを取り除いたり、<strong>を<b>に書き換えた。
  • php7.2だと古いとかどうとか言うメッセージが出ていたので、適当にPHPの新しいのを入れようとする( ゜σ・゚)ホジホジ
     
    => なんか知らんけどPHP8.0が入る。
  • なんかよくわからないが、WordPressがエラーで表示されなくなる…(ヽ'ω`)
     
    => "WP Multibyte"プラグインでエラーが起きてるみたいだが、以前の方法ではエラーが解決しない。 よくわからないので取り敢えず"WP Multibyte"プラグインを削除して、何も見なかったことにする。
  • 何も考えなしにGCP上にUbuntuを18.04 LTSから20.04 LTSにアップグレードをしてしまう( ゜σ・゚)ホジホジ
     
    => 気のせいか、なんかサーバのレスポンスが悪くなった気がする…(ノ∀`)
    お金がなくて最低スペックで運用してるのがいけないんだけどもw
  • 久しくバックアップを取っていなかったので、"BackWPup"プラグインで適当にバックアップを取ろうとする( ゜σ・゚)ホジホジ
     
    => プラグインがフリーズしてしまい、致し方なく、GCPでリブートする。
  • リブート後、復旧したかに見えたがアクセスに著しく時間がかかるようになり、ほとんど実用に耐えなくなる…(ヽ'ω`)

    サーバというよりもネットワークに問題が発生しているような感じだった。
     
    => 一応、文字データのバックアップは取ってあったものの、「もう、このブログは閉じて、Googleサイトとかで何とかしようかな…(´・ω・`)」と言う気になってくる。駄目元でリブートではなく、インスタンスを停止して、ちょっと経ってから起動し直す。
     
    => よくわからないが復活キタ━━ヽ( ゚∀゚)ノヽ(゚∀゚ )ノ━━ !!!!!
     
    => 尚もバックアップを取ろうとしてまたフリーズして同じ手順を繰り返したりする(ノ∀`)

    最終的に"BackWPup"プラグインを削除した後に、何故か上手く行ったバックアップが残っていたみたいだったのでダウンロードする。念の為、画像ファイル等も手動でダウンロードする。

  • ちょっと前に古いArrowsタブレットをセットアップし直したが、ユーザー名もパスワードも秘密の質問も忘れてしまい、お手上げになる ∩( ・ω・)∩ バンジャーイ
     
    => しょうがないので20H2のイメージでリカバリしようとするも上手く行かず…_| ̄|○
     
    => 古いタブレットPCだと8GB以下のUSBメモリでないとリカバリ出来ない場合があるとかいう情報を見て絶望するガ━━(゚Д゚;)━━━ン!! うちには16GB以上のUSBメモリしかなかった…
     
    => 8GBのUSBメモリは安いけれども、無駄金は出せない状況で21H1がリリースが近いということで取り敢えず放置する。
     
    => ようやく21H1がリリースされたので、駄目元で16GBのUSBメモリにイメージをダウンロードしようとする。
     
    => その段になって、ようやく持っているArrowsタブレットが32bit CPUであることを思い出す(ノ∀`)

    32bit/64bit両用でセットアップ用USBメモリを作成して、クリーンインストールを無事に終わらせた。本当はメインPCもクリーンインストールをそろそろしたいけれども…

  • そう言えばなんでWordpressのクラシックエディタって、bボタンを押すと<strong>タグが挿入されるんじゃろうかと悩む(´・ω・`)
     
    => 自分で変更したのかなと思ったのだが、何処で変更したのかが思い出せない……デフォルトでもそうじゃなくてもいいから、とにかくボタンをカスタマイズしたくなる。

    => プラグインもあったが、取り敢えずfunction.phpに直接入れる方法でカスタマイズした。スタイルやクラスを最初から指定したタグや、一連のタグをそのままボタン登録出来て便利だな、これ(・∀・)
    【WordPress】投稿する時に便利!h2,h3,br,p等の基本タグをボタン1つで挿入できるようにしよう


Linkedinラーニングの「Androidアプリ開発基本講座:Kotlinで初めてのアプリを作る」の動画を観る。

うーん(´・ω・`)
まあ以下にメモ書きの羅列をベースに、感想的なものを残す。


AndroidXってJetpackのことだったのか Σ(゚∀゚;)
つーか元々のサポートライブラリのことか Σ(゚∀゚;) ← 余りにもAndroidから離れていて隔世の感が酷いw

フォントサイズの設定で、うちの環境では34spしか出て来ない。なぜ36spがないんだろうか?


jcenter()絡みでエラーが出た。
build.gradleのrepositoriesから除去すればいいんか。
jcenter, bintray 廃止で自分のAndroidアプリに対応したことのメモ

インテントでアクティビティにアクションを送る
ぼーっと観ていたら、いきなり変更後のコードになってる?
もしかして動画を一本くらい見逃しちゃったのか、俺(´・ω・`)?

取り敢えずダウンロードしておいた完成プロジェクトからactivity_main.xml,activity_detail.xml,string.xmlの内容をコピペして、
drawable02から04のwebpファイルをdrawableフォルダにコピペした。

MainActivity.ktでのimageView絡みのコードを削除。

monster01で補完が出ない…?

"kotlinx.android.synthetic.main.activity_main.*"でsyntheticが解決出来ないみたい(´・ω・`)

ぐぐったら、

Android Studio 4.1を用いているなら、build.gradle(Module:<プロジェクト名>.app)に記述の追加が必要です。
plugins {
id 'com.android.application'
id 'kotlin-android'
id 'kotlin-android-extensions'
}
kotlinxが未解決の参照になってしまう

とあった。

ここに至る手順で俺氏が飛ばしてしまったのか、バージョン4.21なのが原因なのか不明だが、取り敢えず追加してみた。

って、pluginsに一番下の"id 'kotlin-android-extensions'"を追加すればいいのか。

でもエラーのまんま…(´・ω・`)

ああ、単純にビルドすれば解決されるわけじゃないのか。
Gradle Syncがどうとか…

右上辺りにある象さんがパオーンしてるアイコンをクリックしたら解決したわ(・∀・)
Android StudioでGradle syncボタンが見つからない


いきなりメモ帳かなんかから文字列を共有するのは観ている人間にはわからんだろw

メモ帳系はインストールしてなかったので、入れてたGoogle Keepに"Monster03"とか入力して、共有で自分の作ってるアプリを選択すると無事DetailActivityに文字列で指定したモンスターが表示された。

動画系で技術的な部分の説明を丁寧にしない/できないのは百歩譲って良いかもしれないが、何の脈絡もなく、手順をかっ飛ばしちゃうのは酷すぎだろw

どのくらいのレベルの人に対して、どのくらいのレベルの内容を教えたいのかがわからんw

例えば俺氏みたいにJavaでAndroidプラグラミングの触りくらいまでをやっている人ならば何とか対応できるけど、そうでない人には( ゚Д゚)ポカーンだし、対応できる人ならば、この講座の内容は余りにも初歩的で物足りないというか時間の無駄に近いw

どうも元は海外の人の作ったものを翻訳というか流用しているみたいだが、元もこのレベルの内容なんだろうか…(ヽ'ω`) 


色々言いたいことはあるが…うーんw
取り敢えず環境構築のところでMacとWinの両方の説明してるのは良心的であったとは思う。

ただ、はっきりと言えることは、この動画ではkotlinの説明らしい説明は大してしてないw

確かにkotlinで初めてのアプリを作ってると言えば作ってると言えなくもないが、動画の大半はAndroid Studioの環境構築や説明であり、作成したものはアプリと言えるレベルのものではないw

何はともあれLinkedinラーニングは購読キャンセルした。
キャンセルを忘れて課金されても困るし(ノ∀`)オカネナイ
Linkedinのアカウントも特に使い道はないので、そのうち消してしまうかもしれない…


最近動画の講座を観始めて思ったが、巣ごもりDXステップ講座情報ナビでもそうだったが、環境構築の部分と言語や機械学習の説明の部分が分離されていないのはどうかなと思った。

プログラミング学習とは明確に分離された、最低でも2大プラットフォームをカバーした環境構築・使用法講座を新設し適宜更新し続けるべきだと思う。出来れば各講座共通のものとして。

それをしないと、各企業の講座で同じような環境構築の内容を入れて全体が長くなりすぎてしまったり、長さは変わらないが本編である内容の説明が疎かになったり、或いは中途半端な環境構築の内容(Win/Macの片方しか説明しない、内容が古い、使用するツールが異なる・存在しなくなっている等)が配信されたりする現状が続いてしまい、それらはあらゆる学習者を疲弊損耗させる障壁として聳え続けることになるだろう(´・ω・`)


取り敢えず動画系はひとまずやめて、ごっぐるのhttps://developer.android.com/codelabs/のkotlinのやつをやり始めた。初心者向けコースから始めたので、今のところ、基本的な内容でアレである。

でもなんか知らんけど、無茶苦茶ログインに時間がかかって中々先に進めない(´・ω・`)
うちのネットワークが遅いからなのかな?

テストの解答を送信してもエラーになる。
なんじゃこりゃ(´・ω・`)

と思ったらAM8:00近くになったら急につながるようになった。
メンテナンスとかしてたのか、あるいは他の国のユーザー達のせいで重かったのか…?
でもやっぱりまた重たくなったような…

まあどうでもいいや(ノ∀`)

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

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

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

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

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


他の人のエントリを色々読み、理解せずにやっていたから気が付かなかったが、手順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から)

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

前回のエントリに続き、Unity側の手順。
尚、今回の設定値等は前回の設定値と対応している。


  1. Unity Hubを起動し、任意のバージョンのUnityでプロジェクトを作成する。
    ※この例では"2020.2.4f1"
  2. [2D]を選択、任意のプロジェクト名を指定し、<作成>をクリック。
    ※この例では"UniAndLink"。ちなみになんでネーミングにブレがあるかというと、それほど深く考えて作らなかったから(ノ∀`)
  3. Unityが起動したら、[ファイル]-[ビルド設定]の順に選択。
  4. 「Build Setting」タブが表示されたら、[App Bundleをビルド]、[開発ビルド]、[スクリプトデバッグ]を有効にし、 をクリック。

    ※ここは実機デバッグをしない場合は必要ないかも(ノ∀`) [App Bundleをビルド]はそもそもこんな実験プログラムでは必要ないか。

  5. プラットフォームの切り替え処理が終了したら、<プレイヤー設定>をクリック。
  6. 「Project Settings」タブが表示されたら、[企業名]に任意の値を指定。

    ※今もDefaultCompanyだとビルド出来ないのかどうか不明(ノ∀`) もしかしたら変えなくてもいいかも。

  7. [最低 API レベル]を"Android 10.0(API level 29)"、[スクリプティングバックエンド]を"IL2CPP"、[API 互換性レベル]を".NET 4.x"にそれれぞれ設定し、[ARM64]を有効にする。
  8. 「ゲーム」タブに切り替え、画面アスペクト比を"1920x1080 Portrait"を選択。
    ※尚、この辺の手順は実機デバッグでLogを確認する場合には必須ではない(ノ∀`)
  9. 「ヒエラルキー」タブ上で右クリックし、コンテキストメニューが表示されたら、[UI]-[テキスト]を選択。
    ※この例では作成されたTextコンポーネントを持つゲームオブジェクト名を"result"に指定。
  10. 「ヒエラルキー」タブ上で右クリックし、コンテキストメニューが表示されたら、[UI]-[ボタン]を選択。
  11. 「ヒエラルキー」タブ上で"Canvas"を選択し、インスペクターで、
    Canvasコンポーネントの[レンダーモード]で"スクリーンスペース - カメラ"を選択し、[レンダーカメラ]に「ヒエラルキー」タブ上の"Main Camera"をドラッグ&ドロップ。

    Canvas Scalerコンポーネントの[UI スケールモード]を"画面サイズに拡大"、[参照解像度]の[X]と[Y]にそれぞれ"1080"と"1920"を指定。[マッチ]の値を"1"に。

  12. 「プロジェクト」タブ上でAssetsフォルダ以下にPluginsフォルダ、Pluginsフォルダ内にAndroidフォルダを作成し、そこにAndroid Studioでビルドしたプラグイン(ライブラリ)をドラッグ&ドロップ。

  13. 「プロジェクト」タブ上でAssetsフォルダ以下にScriptsフォルダを作成し、Scriptsフォルダ内に"C#スクリプト"を任意の名前で作成。
    ※この例では"CallJavaLib"

  14. 前項で作成したスクリプトファイルをダブルクリックし、Visual Studioが起動したら、以下の内容を入力し、保存。
    ※余り深く考えずに人のコードを切った貼ったしてて気が付かなかったが、これjavalibがstaticである必要もないし、PushButton()メソッドのローカル変数で良かったな(ノ∀`)

    (パッケージ名やクラス名を任意の値を指定している場合は適宜書き換える。特にAndroidJavaObjectをNewする際のパッケージ名を間違えないこと。)

    using UnityEngine;
    using System.Collections.Generic;
    using UnityEngine.UI;
    
    public class CallJavaLib: MonoBehaviour
    {
        static AndroidJavaObject javalib = null;
    
        public static void PushButton()
        {
            Debug.Log("Pushed");
            javalib = new AndroidJavaObject("com.example.uniandlib.ReturnString");
    #if UNITY_ANDROID && !UNITY_EDITOR
            GameObject.Find("result").GetComponent<Text>().text = javalib.Call<string>("returnResult","From Unity");
    #endif
        }
    }
    

  15. Textコンポーネントを持つゲームオブジェクトとButtonコンポーネントを持つゲームオブジェクトのサイズの位置を任意で変更する。
    ※この辺は正直適当で良い(ノ∀`)
  16. Textコンポーネントの[フォントサイズ]を"50"、[色]を黄色に指定する。
  17. 作成したスクリプトをButtonコンポーネントを持つゲームオブジェクトにドラッグ&ドロップ。
  18. ドラッグ&ドロップしたスクリプトが追加されていることを確認し、Buttonコンポーネントの[クリック時]の<+>をクリック。
  19. Buttonコンポーネントの[クリック時]のオブジェクト欄に「ヒエラルキー」タブ上のButtonをドラッグ&ドロップ。

  20. Buttonコンポーネントの[クリック時]の関数欄から[追加したスクリプトファイル]-[ボタン押下時に実行させたいメソッド]の順で選択。
    ※この例では"CallJavaLib"の"PushButton()"。
  21. 実機に接続し、「Build Settings」タブの<ビルドして実行>をクリック。
  22. aabの名前を指定して<保存>をクリック。
  23. 問題がなければ、実機上で以下のように表示され、ボタンをクリックすると、Javaライブラリ上で指定した文字列が追加されTextコンポーネント上で表示される。

内容的に大したことをしていないが、取り敢えず、Javaプラグインの初歩の使い方は理解出来たので良しとしよう(・∀・)

久しぶりに手順みたいなのを作ったから、色々と瑕疵がある(ノ∀`)