Linux 版 Android Studio をデスクトップに登録する方法

最終更新日

ドックにアイコンを追加するには [Tools] > [Create Desktop Entry…] を実行する。

これがあるとだいぶ便利だよね!

この機能自体はドキュメントで説明されてるんだけど、Android 開発の入門者が最初に見るであろうトレーニングには書かれてない。トレーニングに沿って勉強してた僕は、ここで不要に躓いてしまった 😦 これから勉強する人が躓かないようにメモしておこう。


さて、上に書いた通り、僕は Android の初心者向けトレーニングに挑戦してみた。ここから先は、そのトレーニングの最初の最初をやってみた感想を書いてみよう。話題はガラリと変わります。

初心者向けトレーニング ユニット 1 に挑戦した現時点の感想

Android 公式の初心者向けトレーニング [Compose を用いた Android アプリ開発の基礎] のユニット 1 のパスウェイ 3 の途中まで完了した時点の僕の感想を書こう。ユニット 1 は基本的な UI を組み立てる練習で、パスウェイ 3 の [7 練習問題: Compose の基本] は 3 つの UI を自力で組み立てる実践課題だった。

僕の進捗の図

Linux で Android Studio を導入するの、ちょっとムズい

  • Flatpak 版 Android Studio はエミュレータが正しく起動しなかった
    • Fedora ユーザなので、可能なら Flatpak を使うのが良いかなと思ったんだけど
    • 普通にトレーニングの指示に従い、公式サイトからダウンロードしました
  • ドックにアイコンを追加するには [Tools] > [Create Desktop Entry…] を実行する
    • 別のドキュメントに書かれてるんだけど、トレーニングには書かれてなくて不便 😦

modifier が分からん

  • 取り組み中の [7 練習問題: Compose の基本] の、To Do 管理アプリの完了画面を作る課題の話
    • 画像と文字を、画面のど真ん中に配置する
  • こんなコードを書いてみたんだけど、たぶん良い実践に沿ってないと思う (関数名は project 生成時のままです、すみません🙇‍)
  • 何が起こってるか自分で書いておいてよく分かってないし、どうするのが正しいのかも分からない…
class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContent {
            TaskManagerCompletedTheme {
                Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->
                    Greeting(
                        name = "Android",
                        modifier = Modifier.padding(innerPadding)
                    )
                }
            }
        }
    }
}

@Composable
fun Greeting(name: String, modifier: Modifier = Modifier) {
    Column(
        modifier = Modifier.fillMaxSize(),
        verticalArrangement = Arrangement.Center,
    ) {
        val image = painterResource(R.drawable.ic_task_completed)
        Image(
            painter = image,
            contentDescription = null,
            modifier = modifier.align(Alignment.CenterHorizontally)
        )
        Text(
            text = "All tasks completed",
            fontWeight = FontWeight.Bold,
            modifier = modifier
                .paddingFromBaseline(24.dp, 8.dp)
                .align(Alignment.CenterHorizontally)
        )
        Text(
            text = "Nice work!",
            fontSize = 16.sp,
            modifier = modifier.align(Alignment.CenterHorizontally)
        )
    }
}
  • modifier って:
    • 最初の onCreate() 内の Greeting() 実行時に生成された Modifier インスタンスが引き回されている? (引き回されるべき?)
    • それとも都度インスタンスが生成されている? (生成されるべき?)
    • それとも、全然そういう感じじゃない?
  • 例えば、上記の Column()Greeting() の呼び出し時に渡された modifier を使わずに再生成してる?
    • その上で Column() 内の Image()Text() は、Column() 実行時に生成された modifier を受け取って使ってる?
  • これら (↑) の推測が正しいかどうか分かってないし、仮に正しいとして、これが良い実践に沿っているかどうかも分からない😢

[Design] ペインとエミュレータの表示が一致してない気がする

  • これも、取り組み中の [7 練習問題: Compose の基本] の話。
    • Compose についての記事を表示する風のアプリの UI を作る
  • 指定された通りの padding を設定したつもりだけど、[Design] ペインとエミュレータの表示が一致していない。なんかエミュレータのほうがパディングが広い
パディングの広さが一致してない気がする。エミュレータのほうが広い
  • 書いたコードはこんな感じ。これも modifier の取り扱いがポイントだったりするんだろうか?
class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContent {
            ComposePracticeTheme {
                Scaffold(
                    modifier = Modifier.fillMaxSize()) { innerPadding ->
                    Greeting(
                        name = "Android",
                        modifier = Modifier.padding(innerPadding)
                    )
                }
            }
        }
    }
}

@Composable
fun Greeting(name: String, modifier: Modifier = Modifier) {
    val image = painterResource(R.drawable.bg_compose_background)
    Column(modifier, verticalArrangement = Arrangement.Top) {
        Image(
            painter = image,
            contentDescription = null,
            contentScale = ContentScale.Fit
        )
        Text(
            text = stringResource(R.string.jetpack_compose_tutorial),
            fontSize = 24.sp,
            modifier = modifier
                .padding(16.dp)
        )
        Text(
            text = stringResource(R.string.jetpack_text_01),
            modifier = modifier
                .padding(horizontal = 16.dp, vertical = 0.dp),
            textAlign = TextAlign.Justify
        )
        Text(
            text = stringResource(R.string.jetpack_string_02),
            modifier = modifier
                .padding(16.dp),
            textAlign =TextAlign.Justify
        )
    }
}

GitHub にコードを載せたい

  • これは単に積み残し。まぁ別に書いて捨てられる程度の規模のコードでしかないけど、記録としてね
  • Android Studio と GitHub の連携も調べないといけないね。トレーニングの目次を見ても、Git の話題は取り扱いがなさそうだし

(補足) Android のトレーニングとは?

Android アプリ開発に入門したい人向けに、Google が公式に用意するトレーニングのこと。トレーニングには、次に挙げる 5 種類のコンテンツがある

  1. 初心者向け
  2. 経験豊富な Android デベロッパー向け
  3. Kotlin 言語のトレーニング
  4. Android Java デベロッパー向け
  5. 認定資格プログラム
トレーニング  |  Get started  |  Android Developers

このうち、初心者向けの [Compose を用いた Android アプリ開発の基礎] は Android 入門者が最初に学ぶ教材として最適だと思う。僕がやったのもこれ。8 つのユニットを通して Android アプリ開発のいろはを順に体験していく。想定の所要時間の合計がちょうど 100 時間の、かなり本格的なトレーニングだ。以下は目次。

ユニットパスウェイ所要時間 [時間]
1: 初めての Android アプリ1: Kotlin の概要3
2: Android Studio をセットアップする4
3: 基本的なレイアウトを作成する3
2: アプリ UI を作成する1: Kotlin の基礎8
2: アプリにボタンを追加する6
3: UI と状態を操作する7
3: リストの表示とマテリアル デザインの使用1: Kotlin の基礎(その他)8
2: スクロール可能なリストを作成する4
3: 美しいアプリを作成する3
4: ナビゲーションとアプリ アーキテクチャ1: アーキテクチャ コンポーネント9
2: Jetpack Compose でのナビゲーション6
3: さまざまな画面サイズに適応する13
5: インターネットに接続する1: インターネットからデータを取得する6
2: インターネットから画像を読み込んで表示する3
6: データの永続化1: SQL の概要2
2: Room を使用してデータを永続化する6
3: DataStore でキーを使用してデータにアクセスし保存する2
7: WorkManager1: WorkManager でタスクのスケジュールを設定する3
8: Compose とビュー1: ビュー内の Android ビューと Compose3
2: Compose 内のビュー1
公式 Android トレーニングの目次

1件のコメント

コメントを残す

回れ右の内輪差をもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む