LoginSignup
9
8

More than 3 years have passed since last update.

Android Jetpack(AndroidX Projects)のPlaygroundについて

Posted at

以下でAndroid Jetpack(AndroidX Projects)の開発が行われています。
https://github.com/androidx/androidx
見て気になったPlaygroundという仕組みがあって、大規模なプロジェクトでは応用できそうなので、メモしておきます。

以下にPlaygroundの説明があります。300を超えるモジュールがあるのですが、独立して実行できる。つまり、あるモジュールとそれに必要なモジュールだけをIDEで開いたりビルドすることができるPlaygroundという仕組みがあります。
https://github.com/androidx/androidx/blob/68ce8d632705fbed51333e7051fbc0f673160919/playground-common/README.md

ちょっとprojectの構造をみていきましょう。以下のようなフォルダ構造になっており、普通にGradleでインポートできるようになっています。

root
├── activity                                                                                                                       
├── ads                                                                                                                            
├── androidx-plugin                                                                                                                
├── annotation                                                                                                                     
├── appcompat                                                                                                                      
├── appsearch                                                                                                                      
├── arch                                                                                                                           
├── asynclayoutinflater                                                                                                            
├── autofill                                                                                                                       
├── benchmark                                                                                                                      
├── biometric       
...                                                                                                           
├── build.gradle    
...
├── settings.gradle
...

./gradlew projectsでプロジェクト構造を見てみると以下のようにたくさんのプロジェクトが入っています。

Root project 'androidx'
+--- Project ':activity'
|    +--- Project ':activity:activity'
|    +--- Project ':activity:activity-compose'
|    |    +--- Project ':activity:activity-compose:activity-compose-samples'
|    |    \--- Project ':activity:activity-compose:integration-tests'
|    |         \--- Project ':activity:activity-compose:integration-tests:activity-demos'
|    +--- Project ':activity:activity-ktx'
|    +--- Project ':activity:activity-lint'
|    \--- Project ':activity:integration-tests'
|         \--- Project ':activity:integration-tests:testapp'
+--- Project ':ads-identifier'
|    \--- Project ':ads-identifier:integration-tests'
|         \--- Project ':ads-identifier:integration-tests:testapp'
+--- Project ':ads-identifier-benchmark'
+--- Project ':ads-identifier-common'
+--- Project ':ads-identifier-provider'
|    \--- Project ':ads-identifier-provider:integration-tests'
|         \--- Project ':ads-identifier-provider:integration-tests:testapp'
+--- Project ':ads-identifier-testing'
+--- Project ':annotation'
|    +--- Project ':annotation:annotation'
|    +--- Project ':annotation:annotation-experimental'
|    +--- Project ':annotation:annotation-experimental-lint'
|    +--- Project ':annotation:annotation-experimental-lint-integration-tests'
|    \--- Project ':annotation:annotation-sampled'
...
...

ここまでは普通なんですが、ここでactivityのディレクトリの中を見てみると以下のようになっています。
./gradlewやsettings.gradleなどがモジュールの中にも存在しています。 普通Gradleのプロジェクトではルートのディレクトリのみにsettings.gradleなどが存在していますが、このディレクトリの中にも存在しています

-rw-r--r--  1 takahirom  staff   107B  4 25 19:01 OWNERS
-rw-r--r--  1 takahirom  staff   652B  4 25 19:01 README.md
drwxr-xr-x  6 takahirom  staff   192B  4 25 19:01 activity
drwxr-xr-x  7 takahirom  staff   224B  4 25 19:01 activity-compose
drwxr-xr-x  6 takahirom  staff   192B  4 25 19:01 activity-ktx
drwxr-xr-x  4 takahirom  staff   128B  4 25 19:01 activity-lint
lrwxr-xr-x  1 takahirom  staff    27B  4 25 19:01 gradle -> ../playground-common/gradle
lrwxr-xr-x  1 takahirom  staff    47B  4 25 19:01 gradle.properties -> ../playground-common/androidx-shared.properties
lrwxr-xr-x  1 takahirom  staff    28B  4 25 19:01 gradlew -> ../playground-common/gradlew
lrwxr-xr-x  1 takahirom  staff    32B  4 25 19:01 gradlew.bat -> ../playground-common/gradlew.bat
drwxr-xr-x  3 takahirom  staff    96B  4 25 19:01 integration-tests
-rw-r--r--  1 takahirom  staff   1.2K  4 25 19:01 settings.gradle

ここで./gradlew projectsしてみると。。?
activityとそれに必要なプロジェクトだけセットアップされている事がわかります。

------------------------------------------------------------
Root project 'activity-playground'
------------------------------------------------------------

Root project 'activity-playground'
+--- Project ':activity'
|    +--- Project ':activity:activity'
|    +--- Project ':activity:activity-compose'
|    |    +--- Project ':activity:activity-compose:activity-compose-samples'
|    |    \--- Project ':activity:activity-compose:integration-tests'
|    |         \--- Project ':activity:activity-compose:integration-tests:activity-demos'
|    +--- Project ':activity:activity-ktx'
|    +--- Project ':activity:activity-lint'
|    \--- Project ':activity:integration-tests'
|         \--- Project ':activity:integration-tests:testapp'
+--- Project ':annotation'
|    \--- Project ':annotation:annotation-sampled'
+--- Project ':compose'
|    +--- Project ':compose:lint'
|    |    +--- Project ':compose:lint:common'
|    |    \--- Project ':compose:lint:internal-lint-checks'
|    \--- Project ':compose:test-utils'
+--- Project ':fakeannotations'
+--- Project ':internal-testutils-common'
+--- Project ':internal-testutils-gradle-plugin'
+--- Project ':internal-testutils-runtime'
+--- Project ':lint-checks'
|    \--- Project ':lint-checks:integration-tests'
\--- Project ':test-screenshot'

Included builds
\--- Included build ':androidx-plugin'

このようにサブプロジェクト単体で動かせるようにしています。ドキュメントによると、CIはルートプロジェクトで行う前提になっており、ローカルでの開発のみに使用することを目的としているようです。

9
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8