#author("2021-06-11T09:55:28+09:00","","")
#contents();
** 開発環境設定 [#x199b7a3]
*** インストールしたバージョン [#cb3ed94c]
- Android Studio 4.0.1 (2020-07-25)

*** アプリケーションの SDK バージョンの確認と設定 [#t9a97ea5]
- [File] → [Project Structure (Ctrl+Alt+Shift+S)] で Default Config タグ
-- &ref(SDK_version.JPG);

*** Linux 環境での Android Studio の起動 [#p0e14bd3]

 [local] munakata:~/android-studio/bin$ ./studio.sh 

*** git 連携 [#fc75000c]
- [VCS] → [Enable Version Control Integration...] を選択
- プルダウンから [Git] を選択
-- この時点で project 配下に git ディレクトリ (=local repo) が作られる
- Android Studio の左下に [Version Control] タブが出現し、ここからファイルのコミットや修正の取り消し(Revert)が出来るようになる
-- &ref(git_integ.JPG);
- remote repo 登録
-- [VCS] → [Git] → [remote] ( ssh://munakata@kgb.hmuna.com:8823/mnt/raid_vol/home/git/repos/jade_db )
--- &ref(git_remote.JPG);
-- git push への対応
--- [VCS] → [Git] → [Push]
-- git clone で新規プロジェクトを開始
--- [File] → [New] → [Project from Version Control] → [Git]

*** CPU が仮想化対応しているかの確認(0 が戻る場合は仮想化に対応していない) [#pc78b2f2]

 [local] munakata:~/android-studio/bin$ egrep -c '(vmx|svm)' /proc/cpuinfo
 8

- ここで 0 以外が帰っても BIOS の仮想化支援が有効になっていないと Linux で KVM が使えない(と、AVD が起動できない)

*** Linux 環境で /dev/kvm へのアクセス権付与(しないと avd が立ち上がらない) [#g82b5575]
 [local] munakata:~/android-studio/bin$ ls -la /dev/kvm
 crw-rw---- 1 root kvm 10, 232  7月 27 11:03 /dev/kvm
 
 [local] munakata:~/android-studio/bin$ grep kvm /etc/group
 kvm:x:130:
 
 [local] munakata:~/android-studio/bin$ sudo adduser $USER kvm
 ユーザー `munakata' をグループ `kvm' に追加しています...
 ユーザ munakata をグループ kvm に追加
 完了。
 
 [local] munakata:~/android-studio/bin$ grep kvm /etc/group
 kvm:x:130:munakata

*** AVD (仮想デバイス) の起動に失敗する場合 → Graphics アクセラレーションの設定を確認 [#m7a5fdde]
- Software OpenGLES 2.0 を選択して起動する場合ライブラリーの設定に問題がある
- 公式ドキュメント [[Android Emulator のハードウェア アクセラレーションを設定する:https://developer.android.com/studio/run/emulator-acceleration?hl=ja]]
- &color(red){Ubuntu ではデフォルトで OSS 版の Nouveau NIVIDIA GPU ドライバーが使われているが、これだと AVD のアクセラレーションが出来ない };
- NVIDIA 製の GPU ドライバーに切り替える必要あり

- &ref(avd_settings.jpg);

*** [[Android Studio (Ubuntu 18.04) 日本語化:https://toshio-web.com/ubuntu-android-studio-install#toc4]] [#b4e0673b]
- [[日本語化を行った場合(や、コード上に日本語コメントを書く場合)の追加対応:https://hlplus.jp/android/init-setting/]]
- [File] → [Settings] → [Editor] → [File Encodings]を展開し「Project Encoding:」横のリストから「UTF-8」を選択

*** [[日本語化を解除(英語に戻す):https://www.javadrive.jp/android/install/index5.html#section4]] [#t74bfae9]
- エラーメッセージを検索する時など英語の方が便利(ヒット件数がずっと多い)な事が多いので
- C:\Users\magu7\.AndroidStudio4.0\config\studio64.exe.vmoptions を編集して最後の2行をコメントアウトする

 # Custom VM options (Generated by Pleiades Installer)
 # See https://pleiades.io/pages/pleiades_jetbrains_manual.html
 #-Xms256m
 #-Xmx1280m
 -XX:ReservedCodeCacheSize=240m
 -XX:+UseConcMarkSweepGC
 -XX:SoftRefLRUPolicyMSPerMB=50
 -XX:CICompilerCount=2
 -Dsun.io.useCanonPrefixCache=false
 -Djava.net.preferIPv4Stack=true
 -Djdk.http.auth.tunneling.disabledSchemes=""
 -Djdk.attach.allowAttachSelf=true
 -Dkotlinx.coroutines.debug=off
 -Djdk.module.illegalAccess.silent=true
 -Djna.nosys=true
 -Djna.boot.library.path=
 #-Xverify:none
 #-javaagent:C:\Users\magu7\.AndroidStudio4.0\config\jp.sourceforge.mergedoc.pleiades\pleiades.jar

*** Android Studioで実機デバック [#af769120]
- 実機端末での操作
-- 端末を開発者モードに設定 ([設定] → [システム] → [詳細設定] → [端末情報] でビルド番号の連打)
-- Android 9(API レベル 28)以上: [設定] → [システム] → [詳細設定] → [開発者向けオプション] → [USBデバッグ]
- 開発マシンでの操作(Ubuntu)
-- adb パッケージのインストール
 [local] munakata:~$ sudo apt install adb
 [sudo] munakata のパスワード: 
 パッケージリストを読み込んでいます... 完了
 依存関係ツリーを作成しています                
 状態情報を読み取っています... 完了
 以下の追加パッケージがインストールされます:
   android-libadb android-libbase android-libboringssl android-libcrypto-utils android-libcutils android-liblog
   android-sdk-platform-tools-common

- Android Studio での操作
-- [Run] → [Edit Configurations] → [Deployment Target Options] で TargetをUSB deviceに設定
-- 緑矢印(RUN)を押すと、デバッグターゲットを選択する画面が出るので 実機を選択
-- 実機にアプリがインストールされ(なので、USB 外しても実行可能)アプリが起動する

*** [[アプリ起動時に Google ログインを要求する:https://developers.google.com/identity/sign-in/android/sign-in?hl=ja]] [#wba97b23]
- [[Start Integrating Google Sign-In into Your Android App:https://developers.google.com/identity/sign-in/android/start-integrating?hl=ja]]
- これは本格的に(=OAuth 2.0 を使って)Google の認証基盤を利用する方法なので、目的に対しては重すぎるかも。
- 今回は単純に Top ページのアクティビティでパスワード入れたら本メニュー画面に移行するようにすれば十分かな

*** [[ファイル / フォルダ / アプリケーションを Kaskersky リアルタイム保護対象から除外するには?:https://support.kaspersky.co.jp/14855]] [#e24a74e1]
- Android Stuido 実行中に以下のワーニングが出たので [[対処:https://developer.android.com/studio/intro/studio-config?utm_source=android-studio#antivirus-impact]] した
- &ref(ANTIV.JPG);
- Kaspersky [設定]-[脅威と除外リスト] に以下を追加した
- &ref(KASP.JPG);

** アプリ開発 [#h1e3626d]
*** [[アクティビティ(画面)のライフサイクル:https://www.javadrive.jp/android/activity/index2.html]] [#s53ff0c6]
- 「アクティビティが開始」されると onCreate、onStart、onResume メソッドが順に呼ばれて「実行中」の状態になる
- onCreate でActivityが初めて生成され、Activityの初期化は全てここに書く。つまり全て初期化される。
- onStart は Activityが開始された時に呼ばれる。Activity生成されたがまだユーザーには見えない状態
- onPause は同じアプリの別のアクティビティが開始されようとしたり別のアプリのアクティビティが開始され、元のアクティビティが見えなくなる前に呼ばれる
- onResume は Activityが表示された時、Pause からの戻りで再表示された場合も含む
- onDestroy は Activity を終了する時
- &ref(activity_lifecycle.jpg);
- &ref(abc2016a-1.pdf,center,いまさら聞けない ActivityやFragment のおはなし);
- [[Androidアプリの終了メモ (Activity、Process、Taskはセットで理解する必要がある):http://arcanum.hatenablog.com/entry/20160228/1456620014]]
- [[Activity内でHOMEボタンを受け取る方法 (Intent.ACTION_CLOSE_SYSTEM_DIALOGSを使う方法):http://android-note.open-memo.net/sub/activity--get-home-button-press.html]]
- [[Android開発 ホームボタン押下やアプリ切り替わりを検知する:https://tattyamm.blog.jp/archives/3640900.html]]
- [[ホームボタン押下やアプリ切り替わりを検知する(onUserLeaveHint()を使う方法):https://tattyamm.blog.jp/archives/3640900.html]]
- [[画面遷移パターンでみる Activity のライフサイクル:https://dev.classmethod.jp/articles/android-tips-21-activity-lifecycle/]]
-- logcat でライフサイクルを捕捉するには、tag のキーワードに XXX を指定する
- [[Androidのライフサイクル (を logcat に出力):https://qiita.com/shira-jun/items/843958e1aa2a50adc8eb]]

*** ソフトキーボードを消す処理 [#yfd82b9c]
- [[(採用したコード)画面タップでキーボードを閉じる:https://reftec.work/posts/2019/6/22/#java%E3%81%A7%E3%81%AE%E5%AE%9F%E8%A3%85%E6%96%B9%E6%B3%95]]
- [[エンターキーが押されたらキーボードを閉じる:https://www.itcowork.co.jp/blog/?p=864]]
- [[Androidのソフトキーボードを閉じる:https://www.dogrow.net/android/blog8/]]

** ネイティブ アクションバー(Android 5.0(API レベル 21)以降のマテリアルデザイン準拠) [#kaf46ff7]
*** Actionbar の利用(は、デフォルト設定で利用可能)・・・・ 今回はこれでいこうと考えたが、既に古いようだ [#ae3359d8]
*** Toolbar の利用(にはローカル拡張が必要)・・・・ なので、こちらに対応する必要がありそう [#p75490c2]
- Android5.0で導入されたToolBar
-- ToolBar was introduced in Android Lollipop, API 21 release and is the spiritual successor of the ActionBar
- ActionBarはレイアウトに記載しなくても表示される
- ToolBarは自分でレイアウトに追加する
-- ToolBarは自分でレイアウトに追加する分、カスタマイズやActivity毎の表示・非表示が可能になります。
- 古い記事では <android.support.v7.widget.Toolbar> を追加しているが、このTAG は Obslate 
- AndroidX support library が組み込まれている事を確認
-- /home/munakata/AndroidStudioProjects/MyApp2/app/build.gradle
 dependencies {
     implementation fileTree(dir: "libs", include: ["*.jar"])
     implementation 'androidx.appcompat:appcompat:1.2.0'  <----------------------------------
     implementation 'androidx.constraintlayout:constraintlayout:1.1.3' <---------------------
     testImplementation 'junit:junit:4.12'
     androidTestImplementation 'androidx.test.ext:junit:1.1.1'
     androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
 
 }
-- showAsAction
--- itemタグのapp:showAsAction属性には以下の3コの値がある。
|never|アクションバーに表示させずにオーバーフローメニュー に格納する|
|always|常にアクションバーに表示する(あまりオススメしない)|
|ifRoom|アクションバーに余裕があるときのみ表示する|

*** 参考 URL [#bedb2dac]
- [[メニューの定義 (Android 虎の巻):http://www.dicre.com/android/menu.html]]
- [[:Android アプリにメニューを追加する:https://qiita.com/Uchikoba/items/d2e80c33a3334825bfc4]]
- [[Android ActionBarとToolBarについてのメモ:https://www.letitride.jp/entry/2019/06/10/143854]]
- [[まったくもって理解できないToolbar (Toolbar 内のアイコンを白くする方法):https://antidle.hatenablog.com/entry/20190803/1564842634]]
- [[Defining The ActionBar :https://guides.codepath.com/android/Defining-The-ActionBar]]
- [[Using the App Toolbar:https://guides.codepath.com/android/Using-the-App-Toolbar]]
- [[Android ActionBarとToolBarについてのメモ (2019年の記事):https://www.letitride.jp/entry/2019/06/10/143854]]
- [[ToolBar を使う|Android開発 (2019年の記事):https://moewe-net.com/android/toolbar]]
- [[AndroidAndroid Studio 進捗報告 6日目 Toolbarをいじる (2020年の記事):https://www.evernote.com/client/web#?n=9532c9d2-af43-46a6-9f14-543d19247686&]]


** SQLite3 (この作業は Windows 環境でやったのでエンコードとか面倒だった) [#o90475f7]
*** データベースの生成 [#j5cba037]
 C:\Users\munakata\Source Code\Android\Jade_DB>sqlite3 jade.db
 SQLite version 3.28.0 2019-04-16 19:49:53
 Enter ".help" for usage hints.
 sqlite> create table videos(_id integer primary key, brand integer, title text, type integer, release text, product_ID text, media_exist integer);
 sqlite> .table
 videos

- UTF-8 でエンコードされた CSV ファイルのインポート
 sqlite> .mode csv
 sqlite> .import [csv file (UTF-8 encoded)] [table_name]
 sqlite> .import jade_db.csv videos

- Android Studio のプリジェクト配下に Asset フォルダーを作成し db ファイルをコピー
-- Project の [app] → [source] → [main] フォルダー上で右クリックし、 [New] → [Folder] → [Assets Folder] で Asset フォルダーを作成
--- &ref(Asset.JPG);
-- 出来た Assets フォルダー上の右クリックで Copy path を選ぶと コピー先の絶対パスが得られるので シェルから dbファイルをコピーする
-- &color(red){データベース更新時には、まずアプリをアンインストール(するとデーターベースファイルも消える)して、Asset ホルダーから端末にコピーさせる};
 C:\Users\munakata\Source Code\Android\Jade_DB>copy Jade.db C:\Users\munakata\StudioProjects\jade_db\app\src\main\assets
-- Android Studio で Assets にコピーした db ファイルを開こうとすると &color(red){File was loaded in the wrong encoding: UTF-8}; というエラーが出て IDE 上では文字化け
-- DB Browser for SQLite を使って データの中味を確認したが、データベース自体は正常なので 上記メッセージは無視でよさそう ← &color(red){違うみたい!};
-- Android で Sqlite3 を使う時にはいくつかのお約束がある
--- SQlite3 ではテーブルの &color(red){外部参照はデフォルトでは無効}; になっているので、テーブルは一つにした方が良さそう
--- primary key の名前を _id とする必要がある。属性には integer primary key not null を指定する
--- 主テーブルの他に android_metadata という名前のテーブルを指定する必要がある。日本語の場合は ja_JP を設定
 $ cat createTable.sql  (データベース設定ファイル)
 create table android_metadata (  
     locale text default 'ja_JP'  
 );  
   
 create table sample_data (  
     _id integer primary key not null,  
     name text,  
     address text,  
     tel text  
 );   
 
 $ sqlite3 mysqlite_database.db < createTable.sql (空データベースの生成)

*** 結局 Linux 環境でデータベースを作成 [#z09743fd]
 munakata@mvc:~/winshare/Android_test$ nkf -Lu --overwrite createTable.sql
 munakata@mvc:~/winshare/Android_test$ file createTable.sql
 createTable.sql: ASCII text

 munakata@mvc:~/winshare/Android_test$ nkf -Lu --overwrite normal.txt
 munakata@mvc:~/winshare/Android_test$ file normal.txt
 normal.txt: UTF-8 Unicode text

 munakata@mvc:~/winshare/Android_test$ sqlite3 NormalDB.db < createTable.sql
 
 munakata@mvc:~/winshare/Android_test$ sqlite3 NormalDB.db
 SQLite version 3.22.0 2018-01-22 18:45:57
 Enter ".help" for usage hints.
 
 sqlite> .tables
 android_metadata  videos
 
 sqlite> .mode csv

 sqlite> .import normal.txt videos
 
 sqlite> select * from videos;
 1,1,"増幅",2020-05-01
 2,1,"壁越し推量",2020-04-27
 3,1,"種牛",2020-04-27
 4,1,"首脳会議",2020-04-27
 5,1,"スクェア",2020-04-27
 6,1,"反逆者",2019-04-27
 7,1,"リチャード三世",2020-04-27


*** Android で SQL を利用する実装 [#ya876784]
- 参考 URL
-- [[作成した自分の SQLite database ファイルを、アプリの asset に入れ、初回起動時にアプリのシステムデータベース領域にコピーする方法(Y.A.M の 雑記帳):http://y-anz-m.blogspot.com/2011/01/android-sqline-database.html]]
-- [[【ぶっちゃけAndroidアプリ開発】sqliteでデータベースを作成する:https://qiita.com/Pinehead/items/fa224b936d0faeefe2be]]
-- [[【ぶっちゃけAndroidアプリ開発】SQLiteデータベースにアクセスして画面に表示するサンプル:https://qiita.com/Pinehead/items/a94e75a151be811e4af1]]
-- [[Android Studio初心者がSQLiteを使ってアプリ作成してみた(データの表示、追加):https://akira-watson.com/android/sqlite.html]]
-- [[データベースを作成し、ListViewでデータ一覧表示する (Android 迷走中):http://tantan321.blogspot.com/2015/04/listview_3.html]]
-- [[ListViewでデータ一覧表示、クリックで画面遷移 (Android 迷走中):http://tantan321.blogspot.com/2015/04/listview.html]]
-- [[:]]
-- [[:]]
-- [[:]]
-- [[Android Studio: Database created but no table created:https://stackoverflow.com/questions/56140807/android-studio-database-created-but-no-table-created]]
-- [[(公式) SQLite を使用してデータを保存する:https://developer.android.com/training/data-storage/sqlite?hl=ja]]
-- [[(公式) オブジェクト間のリレーションを定義する:https://developer.android.com/training/data-storage/room/relationships?hl=ja]]
-- [[Androidアプリのデータ保存方法の一つ「SQLite」の使い方 SQLiteOpenHelper編:https://android.roof-balcony.com/shori/strage/sqlite/]]
-- [[Androidアプリのデータ保存方法の一つ「SQLite」の使い方 レコード検索編:https://android.roof-balcony.com/shori/strage/select/]]
-- [[Androidアプリのデータ保存方法の一つ「SQLite」の使い方 行の追加・更新・削除編:https://android.roof-balcony.com/shori/strage/insert/]]
-- [[Androidアプリで使用するSQLiteのテーブル作成時の注意点:https://android.roof-balcony.com/shori/strage/createtable/]]
-- [[Androidアプリ開発 SQLiteの利用 (5.データの読み込み):https://sites.google.com/site/sinandroidsqlite/4]]

** 排他的選択ボタンの配置 [#h67bad20]
- Button を ToggleButton に変更する
- 同時に活性化できるボタンは一つだけ → これは自分でコードを書く
- どれも選択しない事は許容する(起動直後はどれも選択されていない)→ これはデフォルト
- [[Androidでイイカンジの選択ボタンを作ってみた (kotlin):https://dev.classmethod.jp/articles/android-toggle-button-sample/]]

** [[ユーザーによる [戻る] ボタンのタップ:https://developer.android.com/guide/components/activities/state-changes?hl=ja]] [#e943f2ee]

** [[Pixel5 を AVD にマニュアルで追加(デフォルトでは SDK に含まれていない):https://stackoverflow.com/questions/65913071/how-to-get-pixel-5-emulator-in-android-studio/65913124]] [#u9cb6b2f]

- Open AVD manager
- Click New Hardware Profile
- Enter suitable device name e.g. "Pixel 5 API 30"
- Screen size is 6.0", Resolution is 1080 x 2340
- In the Default Skin dropdown, try Pixel 4 XL (this adds the black surround to the AVD. Note that if you use "No skin", it doesn't add the surround shape to the resulting AVD, but you get a useful heading at the top showing its name)
- I accepted the rest of the defaults
- Click Finish
- Click Next to get to System Image dialog
- Select suitable image e.g. R - API 30
- Click Next
- Click Finish

- &ref(pixel5_avd_config.jpg);

** 参考情報 [#i7986d56]
*** 参考 URL 諸々 [#i8f35c5f]
- [[Android programing getstart:https://kuririnz.github.io/AndroidCourse/index.html]]
- [[Androidアプリ開発が面倒だった理由と、その対策:https://tail-island.github.io/jetbus/]]
- [[Android Studioを使ってHello Worldをやってみた:https://qiita.com/kengo_kuwahara/items/e6a3107870d6e1ec039d]]
- [[Android Studioで天気情報を表示するアプリを作ってみた:https://tech-blog.rakus.co.jp/entry/android-studio/weather-hacks]]
- [[Android Studio初心者がSQLiteを使ってアプリ作成してみた(データの表示、追加):https://qiita.com/kengo_kuwahara/items/a8ef858a9810cad42ca6]]
- [[Android 開発超入門:https://youkey.jimdofree.com/]]
- [[:]]
- [[:]]
- [[:]]
- [[:]]
- [[:]]
- [[:]]

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS