web-dev-qa-db-ja.com

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

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

Current project structure

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

<?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>

mainフレーバーのAndroidManifest.xmlには使用許可はありませんが、すべてのフレーバーで共有されるマニフェストコードの残りが含まれています。

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

<?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
  • 同期グラドル

しかし、成功せず。どうすれば修正できますか?どんな助けも大歓迎です。

編集1

各フレーバーAndroidManifest.xmlファイルの場所をresフォルダーのそれぞれからfreeおよびproフォルダーに変更しました。この結果:

  1. Proフレーバーは、期待どおりにライセンス許可を示します。
  2. 無料のフレーバーには、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
55
Marcus

技術の背景:

このリンクでは、マニフェストのマージに使用できるテクニックとパラメーターについて説明しています: http://tools.Android.com/tech-docs/new-build-system/user-guide/manifest-merger#TOC -tools:node-markers

具体的には、tools:nodeマニフェストの特定のXMLノードがマージ中にどのように動作するかを示します。

解決策:

他のマニフェストと別のマニフェストでいくつかの許可を得るには、必要なすべてのアクセス許可をmainに追加し、フレーバーマニフェストで不要なものを削除します(以下の例のように)。

free checkライセンスを削除します

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

あなたの問題は、あなたのフレーバーではなく、ライブラリに起因しています。具体的には、qwknoteGIT:licencing-libraryがリクエストしていますCHECK_LICENSE

すべてのフレーバーでそのライブラリを使用していない場合、フレーバー付きcompileステートメント(たとえば、proCompile)を使用して、そのフレーバーでのみそのライブラリを使用します。

すべてのフレーバーにライブラリを使用しているが、1つのフレーバーで許可が必要ないと確信している場合は、_tools:node属性をフレーバーのマニフェストで使用して、ライブラリが提供する許可をブロックできます。

そして、マニフェスト合併報告書はあなたの友人です。 :-)

21
CommonsWare

これで少なくとも問題は解決するはずです。各バリアントに使用する正確なマニフェストを指定するのに役立ちます。乾杯!各バリアントフォルダーの下のマニフェストファイルに明示的に指示します。

    Android {
      productFlavors {
        prod {
          manifest.srcFile "prod/AndroidManifest.xml"
        }
        dev {
          manifest.srcFile "dev/AndroidManifest.xml"
        }
      }
      ...

}
3
Rowland Mtetezi

コードを変更する必要があります。

<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
    package="se.example.package">

ために:

<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    package="com.your.appid">
1
partizan

アプリのbuild.gradleで、sourceSetsの下にマニフェストのみを指定します。

 Android {
    productFlavors {
                bizdartFlavourNoCallLog {
            minSdkVersion 16
            applicationIdSuffix '.bizdart'
            targetSdkVersion 26
            dimension "tier"
            sourceSets {
                main {
                    manifest.srcFile "src/bizdartFlavourNoCallLog/AndroidManifest.xml"
                }
            }
            copy {
                from 'src/bizdartFlavourNoCallLog/'
                include '*.json'
                into '.'
                }
            }
       }
    }
0
Ebin Joy