1. ホーム
  2. android

Android Studioの2つのフレーバーと異なるマニフェストファイル

2023-10-06 03:55:13

質問

Android Studio で私のフレーバーに対して 2 つの異なるマニフェスト ファイルを定義することに問題があります。これは、私の現在のプロジェクト構造です。

AndroidManifest.xml の中に free のフレーバーはこのようになります。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="se.example.package">
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
</manifest>

AndroidManifest.xml の中に main フレーバーは uses-permission を持ちませんが、すべてのフレーバー間で共有されるマニフェスト コードの残りを含みます。

AndroidManifest.xml の中に pro のフレーバーはこのようになります。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="se.example.package">
    <uses-permission android:name="com.android.vending.CHECK_LICENSE" />
</manifest>

build.gradleでは、2つのフレーバーを次のように定義しています。

productFlavors {
    free {
        applicationId 'se.example.package.free'
        minSdkVersion 14
        targetSdkVersion 21
        versionCode 1
        versionName '1.0'
    }
    pro {
        minSdkVersion 14
        applicationId 'se.example.package.pro'
        targetSdkVersion 21
        versionCode 2
        versionName '1.1'
    }
}

私が期待している結果は、異なるフレーバーが異なる使用許可を定義していることです。 というわけではありません。 結果は現在のところ、両方のフレーバーがそれぞれ <uses-permission android:name="com.android.vending.CHECK_LICENSE" /> で定義されているように AndroidManifest.xml で定義されているように、プロフレーバーで

試してみました。

  • プロジェクトのクリーンアップ
  • プロジェクトのリビルド
  • Android Studioを再起動します。
  • gradleを同期させる

しかし、成功しません。どのようにこれを修正すればいいのでしょうか?どんな助けでも感謝します。

EDIT 1

各フレーバーの場所を変更しました AndroidManifest.xml ファイルの場所をそれぞれの res フォルダから freepro フォルダーに格納されます。その結果

  1. Pro flavor は、期待どおりに Licence permission を表示します。
  2. Free 版では、以下の両方のパーミッションが表示されます。 AndroidManifest.xml ファイル、ライセンス、およびネットワーク権限 (ネットワークのみであるべき) の両方を表示します。

これはプロジェクト構造の問題のように感じられます。これをどうしたらいいのでしょうか?

編集2

Commonsware が示唆したように、マージレポートを取り出しました。 uses-permissions

無料です。

uses-permission#com.android.vending.CHECK_LICENSE
ADDED from qwknoteGIT:licencing-library:unspecified:26:5
    android:name
        ADDED from qwknoteGIT:licencing-library:unspecified:26:22

プロ

uses-permission#com.android.vending.CHECK_LICENSE
MERGED from qwknoteGIT:licencing-library:unspecified:26:5

どのように解決するのですか?

技術的な背景。

このリンクでは、マニフェスト マージに使用できるテクニックとパラメータを説明しています。 https://developer.android.com/studio/build/manage-manifests#merge_rule_markers

具体的なものとしては tools:node で、マニフェスト上の特定の XML ノードがマージ中にどのように動作すべきかを指摘します。

ソリューションです。

あるマニフェストでいくつかのパーミッションを実現し、他のマニフェストで異なるパーミッションを実現するために、必要なすべてのパーミッションを main に追加し、フレーバーマニフェストでは以下の例のように不要なものを削除します。

free チェックライセンスを削除します。

<uses-permission
   android:name="com.android.vending.CHECK_LICENSE" 
   tools:node="remove"/>