問題タブ [dynamic-feature]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - ビルド フレーバーの問題のため、動的機能モジュールを追加できません
既存のアプリに新しい動的機能モジュールを実装したかったのですが、製品のフレーバーの問題により断念しました。
サンプルコードはここにあります。https://github.com/henningBunk/dynamic_feature_problem
私は3つのモジュールを持っています:
- アプリ。アプリのメイン モジュール。2 つの製品フレーバーがあります。
store
:amazon
とgoogle
pay_status
:free
とpro
amazonFree
、amazonPro
、googleFree
およびの 4 つの組み合わせ
になります。googlePro
それは依存し、動的機能としてlib
リストされます。dynamic_feature
lib。ライブラリ モジュールで
app
ありdynamic_feature
、このモジュールに依存します。味lib
だけがあります。pay_status
だから私が例えばビルドするとき。アプリをgoogleFree
フレーバーとして、lib がそのフレーバーをビルドしfree
ます。dynamic_feature. 動的機能となる新しい機能。このモジュールにはフレーバーがあってはなりません。アプリとライブラリに依存します。
製品のフレーバーと依存関係に縮小された 3 つの gradle ファイルは、次のようになります。
アプリ モジュール build.gradle:
lib モジュール build.gradle:
動的機能モジュール build.gradle:
これにより、次のエラーが発生します。
そのため、モジュールにdynamic_feature
は欠損ディメンション戦略が必要になる可能性があると読みました。追加する
dynamic_feature build.gradle を android.defaultConfig に追加します。このようにして、いくつかのフレーバーを作成できますが、すべてではありません。
android - リソースが重複しているため、動的機能リリースのビルドに失敗しました
Androidが提供する動的機能配信を確認するためのサンプルを1つ作成しています。私は次のようにプロジェクト構造を持っています。ベース プロジェクトアプリと 1 つの動的機能sample_dynamic_feature。動的な機能配信に必要なすべての設定が整っています。問題は、基本モジュールと動的モジュールに同じ名前のレイアウト ファイルまたは .xml ファイルを追加すると発生します。基本アプリケーションと動的モジュールの両方にactivity_main.xmlを追加しました。次のエラーが発生しました:
何が悪かったのか:
正常に動作します:
失敗:
完全なスタック トレース:
例外: org.gradle.api.tasks.TaskExecutionException: タスク ':app:packageReleaseBundle' の実行に失敗しました。org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:110) で org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:77) で org.gradle .api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51) org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:59) org.gradle.api.internal .tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java: org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java で) :55) 原因: org.gradle.internal.UncheckedException: java.util.concurrent.ExecutionException: com.android.tools.build.bundletool.exceptions.ValidationException: モジュール「base」と「sample_dynamic_feature」にエントリ「res/layout」が含まれています/activity_main.xml' を別のコンテンツに変更します。org.gradle.internal.UncheckedException.throwAsUncheckedException(UncheckedException.java:63) で org.gradle.internal.UncheckedException.throwAsUncheckedException(UncheckedException.java: ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:99) ... 31 以上 原因: java.util.concurrent.ExecutionException: com.android.tools.build.bundletool.exceptions.ValidationException: モジュール 'base' および 'sample_dynamic_feature' にエントリが含まれています内容が異なる「res/layout/activity_main.xml」。com.android.ide.common.workers.ExecutorServiceAdapter.close(ExecutorServiceAdapter.kt:56) で kotlin.io.CloseableKt.closeFinally(Closeable.kt:53) で com.android.build.gradle.internal.tasks.PackageBundleTask org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73) の .bundleModules(PackageBundleTask.kt:121) ... 44 以上 原因: com.android.tools.build.bundletool。exceptions.ValidationException: モジュール 'base' および 'sample_dynamic_feature' には、内容が異なるエントリ 'res/layout/activity_main.xml' が含まれています。com.android.tools.build.bundletool.exceptions.ValidationException$Builder.build(ValidationException.java:49) で com.android.tools.build.bundletool.exceptions.ValidationException$Builder.build(ValidationException.java:41) でcom.android.tools.build.bundletool.validation.EntryClashValidator.checkEqualEntries(EntryClashValidator.java:66) で com.android.tools.build.bundletool.validation.EntryClashValidator.validateAllModules(EntryClashValidator.java:52) で com.android .tools.build.bundletool.validation.ValidatorRunner.validateBundleModulesUsingSubValidator(ValidatorRunner.java:
このバンドルの違いは何ですか?
android-app-bundle - アンインストール後に動的機能モジュールを削除するには?
私のアプリケーションには、「ベース」と「拡張」の 2 つの機能があります。
マニフェスト拡張機能:
SplitInstallManagerで機能をダウンロード-> startInstall
SplitInstallManager -> deferredUninstallによるアンインストール
インストールされているモジュールをSplitInstallManager -> getInstalledModulesで確認します
拡張機能は Play ストアの成功から読み込まれ、期待どおりに機能します。この機能が不要になったら、アンインストールしてください。
さらに、SplitInstallManager には、SuccessListener、FailureListener、CompleteListener のコールバックがあります。成功して完全にインストールおよびアンインストールします (エラーなし)。
ただし、拡張機能をアンインストールした後 (およびアプリケーションを再起動した後) は、インストールされたままになります。
アンインストールされた機能をアプリケーションから削除する方法 (使用されていないコードとリソースを削除する必要はありません) ?