タグ「Android」が付けられているもの

Google Map SDKを使ったAndroidアプリを作っていて、以下の警告が出た場合の対処について紹介します。
このエラーが出る場合は地図のコントロールの表示はあっても地図そのものが表示されない状態になりました。

W/DynamiteModule: Local module descriptor class for com.google.android.gms.googlecertificates not found.

stackoverflowの記事ではエミュレータを再作成する案が載っていましたが、エミュレータをCold Bootしたところ直りました。
結局原因がなんなのかわかりませんが、とりあえずCold Bootしてみるのは一つの手かもしれません。

Android Developersサイトの歩き方 2022

  • 投稿日:
  • by
  • カテゴリ:

Androidアプリを作成するのに公式ドキュメントを参照しますが、どこにどんなことが書いてあるのかや、初心者が知っておくと良いかもしれないことについて書きます。
場合により記事公開後にも修正や加筆するかもしれません。

公式サイト

公式サイトは以下です。 基本的にすべてのリンクは日本語(向け)ページになっています。

Android デベロッパー

画面上部(PCの場合)にプラットフォーム、Android Studio、Google Play、Jetpack、Kotlin、ドキュメント、ニュースとあります。
よく見ることになるのはドキュメントだと思います。

ドキュメント

では、さっそく見ていきましょう。
勉強の中心になるのは「ドキュメント」の中でも、「ガイド」というところです。

ガイド

ここには「アプリの基本」から始まり、多様な内容について説明があります。
初心者が見て理解できるかはさておき、理解しておくべき概念から実際のコードまで一通り記載されていると思います。

「アプリの基本」と「主要トピック」を見るとなんとなくアプリの全体像がわかってくるんじゃないかと思います。

ちなみにアプリを公開しようという段階になるとここの説明だけだと足りずほかのところも見ることになると思います。
また、ここにないライブラリを使おうと思ったりすると別のところを見る必要が出てきます。
GoogleのライブラリのGoogle Map SDKとかFirebaseとか。ほかにも色々。

アプリの基本

アプリの基本

Hello World的な感じでなんとなくの全体像をつかめれば良いと思います。 色々わかってくると後で戻って読むことになるとも思いますが、まずはなんとなくわかれば十分かと思います。

主要トピック

主要トピックは、アクティビティの概要から始まります。
ここは重要な概念の説明が多く説明されているので理解すべきですが、最初は理解できないと思います。 なんとなくの用語がわかるようになればまずは良いような気がします。

フラグメント

とても重要な用語、概念のフラグメントは、「アクティビティの概要」の中の一節となっているのでフラグメントを探すときはアクティビティのところを探しましょう。
ちなみになぜか日本語化されていないドキュメントが多いです。重要なのに。

Android アーキテクチャ コンポーネント

Android アーキテクチャ コンポーネント

これはJetpackの一部ということになっています。
Android デベロッパーのトップレベルに「Jetpack」というのがありましたが、それです。
比較的新しいライブラリ群のことです。基本的にこれを使いましょう。

以下の項目はここにありますが、これらがアーキテクチャ コンポーネントだと知らないとわからないので難しいです。

  • DataStore
  • ビューバインディング
  • データバインディング
  • ライフサイクル(Lifecycleライブラリ、クラス)
  • LiveData
  • ViewModel
  • Work Manager
  • ページングライブラリ など

Navigation コンポーネント

これも比較的新しいライブラリです。
フラグメントのところでFragment Managerの使い方が紹介されていますが、これをラップしてくれるライブラリなのでこちらを使いましょう。
フラグメントのところのFragment Managerの使い方はどんなことができるのかの概念として知っておくと良いと思いますが、こちらを使う場合は直接使うことはないか少ないでしょう。

インテント

インテントとインテントフィルタ

ここにインテントについて説明がありますが、アクティビティの中の以下でも言及があります。両方見ましょう。

Parcelable と Bundle

ユーザー インターフェース

ユーザー インターフェース

レイアウトの話やアプリバー(画面上部や下部のメニュー等)があります。Toastもここです。

見た目の話と直接紐づかないのが設定の話です。
利用者が設定変更できるようにする話は以下にあります。

設定

サービス、バックグラウンド タスク

サービスというのは音楽プレイヤーのように別のアプリケーションを利用中も継続して動作し続けるための仕組みで、これとは別にバックグラウンドでファイルのダウンロードやアップロード(バックアップ等)をしたいというときのための仕組みある。そうした処理をどのような仕組みを使って実現すべきかというような話から説明がある。

サービスから見ていくと良いと思う。 バックグラウンド タスクは、バックグラウンド(利用者に見えない)でやるとなったときの説明。

権限

権限

利用者に求めるアプリの権限の話。
アプリケーション(全体)、アクティビティ、マニフェストに関連する。

アプリデータとファイル

アプリデータとファイル

ファイルやデータベースの説明が記載されている。
利用者が設定した設定データについては上で述べた「設定」のところに記載があるので要注意。

Jetpackの一部でもあるRoomの説明はこの中のローカルデータベースにデータを保存するに説明がある。
アーキテクチャ コンポーネントのところには記載が無いので要注意。

接続

接続

ネットワーク関連です。
VolleyとCronetというHTTPクライアントライブラリの説明があります。

他にBluetooth等もここです。

おすすめの方法

おすすめの方法には以下のことが書いてあります。

  • 依存性注入(DI)
  • テスト
  • パフォーマンス
  • ユーザー補助
  • プライバシー
  • セキュリティ など

Kotlin

コードの表示をKotlinとしていると説明と合わないことが多々あります。
Kotlinの方が記述を省略できるケースが多く、文章の説明と一致せず理解できないことがありますがそういう場合はJavaのコードを表示してみましょう。

cpanm Safeでインストールしようとするとテストでエラーとなって失敗しました。 対処法わからず。。。

Running Makefile.PL
Checking if your kit is complete...
Looks good
Writing Makefile for Safe
Writing MYMETA.yml and MYMETA.json
-> OK
Checking dependencies from MYMETA.json ...
Checking if you have ExtUtils::MakeMaker 0 ... Yes (6.68)
Building and testing Safe-2.35
cp Safe.pm blib/lib/Safe.pm
Manifying blib/man3/Safe.3pm
PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/safe1.t .......... ok
t/safe2.t .......... ok
t/safe3.t .......... ok
Possible unintended interpolation of @INC in string at /usr/lib64/perl5/DynaLoader.pm line 90.

#   Failed test 'Can load version.pm in a Safe compartment'
#   at t/safeload.t line 26.
# Unable to create sub named "*Safe::Root0::version::vxs::numify" at /usr/local/lib64/perl5/version.pm line 48.
# Compilation failed in require at (eval 11) line 1.
# BEGIN failed--compilation aborted at (eval 11) line 1.
# Looks like you failed 1 test of 3.
t/safeload.t .......
Dubious, test returned 1 (wstat 256, 0x100)
Failed 1/3 subtests
t/safenamedcap.t ... ok
t/safeops.t ........ skipped: PERL_CORE unset
t/saferegexp.t ..... ok
t/safesort.t ....... ok
t/safeuniversal.t .. ok
t/safeutf8.t ....... ok
t/safewrap.t ....... ok

Test Summary Report
-------------------
t/safeload.t     (Wstat: 256 Tests: 3 Failed: 1)
  Failed test:  1
  Non-zero exit status: 1
Files=11, Tests=98,  1 wallclock secs ( 0.04 usr  0.02 sys +  0.53 cusr  0.08 csys =  0.67 CPU)
Result: FAIL
Failed 1/11 test programs. 1/98 subtests failed.
make: *** [test_dynamic] Error 255
-> FAIL Installing Safe failed. See /root/.cpanm/work/1592328454.16336/build.log for details. Retry with --force to force install it.