매니페스트 파일이 다른 Android Studio 두 가지 버전
Android Studio에서 내 취향에 대해 두 가지 다른 매니페스트 파일을 정의하는 데 문제가 있습니다. 이것은 내 현재 프로젝트 구조입니다.
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
맛을 더 사용-권한이 없지만, 모든 맛간에 공유되는 매니페스트 나머지 코드가 포함되어 있습니다.
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은 다음과 같은 두 가지 맛을 정의합니다.
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
But without success. How am I to fix this? Any help is appreciated.
EDIT 1
I changed the location of each flavors AndroidManifest.xml
file from each of the res
folders to free
and pro
folder. The result of this:
- Pro flavor shows Licence permission as expected.
- Free flavor shows permissions from both
AndroidManifest.xml
files, License and network permissions (Should be only network)
This feels like an issue of project structure. What to make of this?
EDIT 2
I pulled the merge reports as Commonsware hinted, these are the reports regarding uses-permissions
Free:
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
Pro:
uses-permission#com.android.vending.CHECK_LICENSE
MERGED from qwknoteGIT:licencing-library:unspecified:26:5
Tech background:
on this link it explains the techniques and parameters that can be use for manifest merging: http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger#TOC-tools:node-markers
One in specific is the tools:node
that points out how certain XML nodes on the manifest should behave whilst merging.
Solution:
to achieve some permisions in one and different in other manifest, add ALL permissions you need to the main
and in the flavours manifest remove the ones you don't need, like the example below:
free
remove the check license
<uses-permission
android:name="com.android.vending.CHECK_LICENSE"
tools:node="remove"/>
Your problem is coming from a library, not your flavors. Specifically, qwknoteGIT:licencing-library
is requesting CHECK_LICENSE
.
If you are not using that library in all flavors, use a flavored compile
statement (e.g., proCompile
) to only use that library in that flavor.
모든 플레이버에 라이브러리를 사용하고 있지만 하나의 플레이버에서 권한이 필요하지 않다고 확신하는 경우, 여기에서 tools:node
속성을 사용하여 플레이버의 매니페스트에서 라이브러리가 제공하는 권한을 차단할 수 있습니다.
그리고 합병 보고서는 당신의 친구입니다. :-)
이것은 적어도 문제를 해결해야합니다. 각 변형에 사용할 정확한 매니페스트를 지정하는 데 유용합니다. 건배! 각 변형 폴더 아래의 매니페스트 파일을 명시 적으로 지정합니다.
android {
productFlavors {
prod {
manifest.srcFile "prod/AndroidManifest.xml"
}
dev {
manifest.srcFile "dev/AndroidManifest.xml"
}
}
...
}
코드를 변경해야합니다.
<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">
앱 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 '.'
}
}
}
}
'program story' 카테고리의 다른 글
randomForest (R 패키지)에 대한 데이터를 정규화 (또는 확장)해야합니까? (0) | 2021.01.08 |
---|---|
Joda-Time Interval과 비슷한 java.time 클래스가 있습니까? (0) | 2021.01.08 |
for 루프에서 과학적 표기법 사용 (0) | 2021.01.08 |
JQuery는 하나의 오류로 여러 필드 유효성 검사 (0) | 2021.01.08 |
Razor : 'Write'메서드에 대한 오버로드는 0 인수를 사용합니다. (0) | 2021.01.08 |