Android原生プロジェクト統合Futterソリューション


Android原生プロジェクトでFutterを統合する方法を調べてください。
設定を生成

            
 
flutter create -t module --org {package_name} {module_name}
 
//    module_name       Android   module      。      。
 
//   , 
 
flutter create -t module --org com.engineer.mini.flutter flutter_sub
 
//    module_name       Android   module      。      。
 
//   , 
 
flutter create -t module --org com.engineer.mini.flutter flutter_sub
</pre>
結果
Creating project sub_flunter…
sub_flunter/test/widget_test.dart(created)
sub_flunter/sub_fluutter.iml(created)
sub_flunter/.gitignore(created)
sub_flunter/.metadata(created)
sub_flunter/pbspec.yaml(created)
sub_flunter/README.md(created)
sub_flunter/lib/main.dart(created)
sub_flunter/sub_flunterandroid.iml(created)
sub_flunter/.idea/libries/Dart_SDK.xml(created)
sub_flunter/.idea/modules.xml(created)
sub_flunter/.idea/work space.xml(created)
Running“flunter pub get”in sub_flunter…1,054 ms
Wrote 11 files.
最終的に上記のファイルが生成されました。ここで最後に注意してください。 自動的にflunter pub getを実行しました。 の命令です。flunter pub getについて具体的に何をしましたか?後のを参考にしてください。
ここでプロジェクトのルートディレクトリの作成子moduleはコードを倉庫に置くだけで、メンテナンスが便利で、理論的にはハードディスクのどの位置に置くことができます。
オリジナルプロジェクトのセットアップを行います。
settings.gradleを配置する前に、Gradeに関する基礎知識を簡単に振り返ってみます。
Graadle関連の構成を知っているなら、きっと概念が見えます。 設定より優れた約束 ,どういう意味ですか?対象に向かって考えると、各プロジェクトは巨大なプロジェクト類で、全体の種類には多くの属性があります。私たちが作成したプロジェクトは具体的なプロジェクトの対象です。配置より優れているという意味で、プロジェクトの実装時には、その内部の属性はすでにデフォルト値があります。では、どのようなデフォルトがあるかどうやって分かりますか?プロジェクトルートディレクトリで実行

./gradlew properties
プロジェクト全体のいくつかのデフォルトの設定が得られます。

------------------------------------------------------------
Root project
------------------------------------------------------------
 
allprojects: [root project 'MiniApp', project ':app', project ':thirdlib']
android.agp.version.check.performed: true
android.enableJetifier: true
android.enableR8: true
android.enableR8.libraries: true
android.useAndroidX: true
buildDir: /Users/username/Documents/mygithub/MinApp/build
buildFile: /Users/username/Documents/mygithub/MinApp/build.gradle
projectDir: /Users/username/Documents/mygithub/MinApp
rootDir: /Users/username/Documents/mygithub/MinApp
rootProject: root project 'MiniApp'
ここには現在いくつかの構成があります。例えば、useAndroid dXなどがありますが、プロジェクト全体にとって、buildDirはプロジェクトのルートディレクトリのbuildフォルダなどという約束があります。
実行

./gradlew :app:properties
一部の結果を抜粋する

buildDir: /Users/username/Documents/mygithub/MinApp/app/build
buildFile: /Users/username/Documents/mygithub/MinApp/app/build.gradle
アプリ全体のmodule現段階に関するいくつかの構成情報が得られます。もちろんこれらの構成情報は約束のほかに、buildTools Version、署名などの関連情報があります。buildDirはプロジェクト全体とは違って見えます。
テーマに戻ります。どうやって先ほど作成したsub_を見ますか?flunterモジュールはプロジェクトに統合されます。厳密に言うとsub_というわけではない。flunterモジュールは、彼はflunterのモジュールだけのため、AndroidメインプロジェクトではAndroid moduleしか集積できません。具体的にはどうすればいいですか?その中の神秘を見に来ます。
公式の操作方法によって、以下の設定をsettings.gradleに追加するように要求します。

// Include the host app project.
include ':app'                                    // assumed existing content
setBinding(new Binding([gradle: this]))                                // new
evaluate(new File(                                                     // new
  settingsDir.parentFile,                                              // new
  'my_flutter/.android/include_flutter.groovy'                         // new
))                                                                     // new
まずここのsettings Dirの値を見てください。settings.gradleに直接追加します。

println "settings.dir=" + settingsDir
println "settings.dir.parent=" + settingsDir.parent
syncの後に出力が見えます。

settings.dir=/Users/username/Documents/mygithub/MinApp
settings.dir.parent=/Users/username/Documents/mygithub
したがって、上の配置情報は、settingsのディレクトリの親ディレクトリと私たちが配置したディレクトリを結合して、include_という名前のディレクトリを見つけます。flunter.groovyのファイルを実行します。
前に述べましたが、子moduleを作るときは、プロジェクトのルートディレクトリでもいいし、他の位置でもいいです。ここのmy_です。flunterは代わりにあなたのためにカタログを作成する絶対的な力を持つことができます。
ここはルートディレクトリで直接作成したものです。以上の構成は簡単に

setBinding(new Binding([gradle: this]))
evaluate(new File(settingsDir, 'sub_flutter/.android/include_flutter.groovy'))
include ':sub_flutter'
####    include_flutter.groovy
上に述べたように、settings.gradleの構成は、実はinclude(u)を実行します。flunter.groovyというファイルはこのファイルを簡単に見ることができます。

def scriptFile = getClass().protectionDomain.codeSource.location.toURI()
def flutterProjectRoot = new File(scriptFile).parentFile.parentFile
 
gradle.include ":flutter"
gradle.project(":flutter").projectDir = new File(flutterProjectRoot, ".android/Flutter")
 
def localPropertiesFile = new File(flutterProjectRoot, ".android/local.properties")
def properties = new Properties()
 
assert localPropertiesFile.exists(), ":exclamation:️The Flutter module doesn't have a `$localPropertiesFile` file." +
                                     "
You must run `flutter pub get` in `$flutterProjectRoot`." localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } def flutterSdkPath = properties.getProperty("flutter.sdk") assert flutterSdkPath != null, "flutter.sdk not set in local.properties" gradle.apply from: "$flutterSdkPath/packages/flutter_tools/gradle/module_plugin_loader.gradle"
androidはAndroidプロジェクトです。彼はFutterフォルダを含んでいます。このFutterはlibraryタイプのAndroid moduleです。この点は彼のbuild.gradleファイルから分かります。include_fluutter.groovyがしていることは、現在のlibraryをflunterと名づける一つのmoudeです。その後、プロジェクトのlocal.propertiesのsdkに関する設定を確認し、最後にFutterSDKの中gradleスクリプトを実行します。ここでの具体的な分析はもう展開しません。
つまり、今はflunterというAndroid Library Moduleがあります。このmoduleはflunterの全構成を含みます。私たちはこのモディに依存すれば、かなりFutterに依存します。
依存flunter
最後に原生プロジェクトのaplication-moduleのbuild.gradleのdependenciesのクローズドに追加します。

implementation project(':flutter')
これで、原生プロジェクトはすでにFutterの依存があり、FutterのViewが使えます。
これまでの原生プロジェクトはFutter SDKのすべての依存を含んでいます。UI関連の内容は、どう書きますか?それともdartでmain.dartに書いてください。その後、私たちはこのdartでレンダリングした内容をActivity、FragmentまたはViewの形で既存の項目に追加することができます。
flunter pub get
flunter pub getまたはpub getは、flunterをする時に第三者libまたはバージョン更新を使用する時に、一つのコマンドを使用して、このコマンドを通じて関連の依存を引き出しますが、このコマンドはAndroidとiOSのオリジナルプロジェクトを自動的に生成します。例えば、私たちが創建したsub_。flunterモジュールでは、Androidと.iosのオリジナルプロジェクトディレクトリが自動的に生成されます。この二つのディレクトリはドットヘッドです。一般的には隠しファイルです。gitignoreファイルも見られます。flunter module形式ではこの二つのフォルダは無視されています。flunter moduleのコアですか?それともmodule形式で元のプロジェクトに統合するのが便利ですか?集積を容易にするためのものであり、一方では直接的に実行してhot-reloadのデバッグを実行するのに便利である。
以上はAndroid原生プロジェクト統合Futterソリューションの詳細です。Android統合Futterに関する資料は他の関連記事に注目してください。