在Android工作室中使用flavor并且 - 选择/未合并错误的AndroidManifest时出错

Tom*_*Tom 5 java android android-studio

我正在尝试设置口味,所以我可以在共享相同代码的同一个项目中构建不同的应用程序...但我不确定我是否完全正确...

我在文件夹W:\ android-studio-projects\sharedid \中创建了一个名为com.sharedid.app的项目

对此,我有

1)在W:\ android-studio-projects\sharedid\app\src\main中创建AndroidManifest.xml,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.sharedid.app"
  android:versionCode="1"
  android:versionName="1.0"
>
<activity android:name="com.shared.app.SharedMain" android:label="@string/MicMainName" >
  <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>
</activity>  
</manifest>
Run Code Online (Sandbox Code Playgroud)

2)在 W:\ android-studio-projects\sharedid\app\src\main\java ...我有所有的.java文件

3)在 W:\ android-studio-projects\sharedid\app\src\main\res我有所有共享和/或虚拟资源

对于我的口味,我有:

1)我在W:\ android-studio-projects\sharedid\app\src\myflavour中创建了AndroidManifest.xml(这个文件定义了所有内容 - 它对于每种风格都是unqiue)

2)在 W:\ android-studio-projects\sharedid\app\src\myflavour\res我有一个文件夹drawable-hdpi包含variois图形

3)在 W:\ android-studio-projects\sharedid\app\src\myflavour\assets我有特定应用程序的各种数据,配置和图形文件.(在运行时通过代码读取)

4)在*W:\ android-studio-projects\sharedid\app\src\myfavlour*我有以下AndroidManifest.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.myflavour.app"
  android:versionCode="2"
  android:versionName="2.0"
>
<uses-sdk
  android:minSdkVersion="9"
  android:targetSdkVersion="17" 
/>
  <uses-feature android:glEsVersion="0x00020000" android:required="true" />

<application
  android:allowBackup="true"
  android:icon="@drawable/app_logo__forlarge"
  android:label="@string/MicAppName"
  android:theme="@style/MicTheme_myflavour"
  android:name="com.shared.app.MicApp"
>
<provider
  android:name="android.support.v4.content.FileProvider"
  android:authorities="com.myflavour.app.fileprovider"
  android:grantUriPermissions="true"
  android:exported="false">
  <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_filepaths" />
</provider>
<activity android:name="com.shared.app.SharedMain" android:label="@string/MicMainName" >
  <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>
</activity>        
<activity>...more...</activity>        
</application>
</manifest>
Run Code Online (Sandbox Code Playgroud)

以下是"Gradle Scripts" - "Build Gradle"(模块:app)的样子:

apply plugin: 'com.android.application'

android {
    signingConfigs {
    }
    compileSdkVersion 21
    buildToolsVersion '21.1.2'
    defaultConfig {
        applicationId "com.sharedid.app"
        minSdkVersion 9
        targetSdkVersion 17
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
        }
    }
    repositories {
        maven { url "https://jitpack.io" }
    }     
    productFlavors {
      myflavour {
          applicationId "com.myflavour.app"
      }
    }
    sourceSets {
      main {
        manifest.srcFile 'src/main/AndroidManifest.xml'
      }
      myflavour {
        manifest.srcFile 'src/myflavour/AndroidManifest.xml'
      }
    }           
}    
dependencies {
    compile 'com.android.support:support-v4:18.0.0'
    compile 'com.google.android.gms:play-services:+'
    compile 'com.android.support:appcompat-v7:21.1.2'
    compile 'com.github.PhilJay:MPAndroidChart:v2.0.8'
}
Run Code Online (Sandbox Code Playgroud)

我的问题是这个

当我在"构建变体"中选择"module = app"和"build-variant = com.myflavour.appDebug"并单击"运行>调试..."时,我会看到一个对话框,指出:"错误:未找到默认活动"

从我的口味的研究,我不应该需要定义sourcesets路径,因为我用的是默认conventenion文件的味道......如果我是正确的abnout说-那么为什么它没有看到选择的风味Androidmanifest文件?

参考链接我的理解基于:

其他疑难解答

在我试图找到这个问题的根源时,我开始怀疑明显的合并是行不通的.这种怀疑的原因是,如果我忽略了关于没有活动的错误并试图将已编译的应用程序推出移动设备,我会收到关于版本号小于移动设备上安装的版本号的警告 - 明确指示错误清单文件正在使用中.

所以我也尝试删除src/main/AndroidManifest.xml,这会导致错误:

任务':app:checkmyflavourDebugManifest'的配置发现了一个问题.为属性'manifest'指定的文件W:\ android-studio-projects\sharedid\src\main\AndroidManifest.xml'不存在

这让我相信Android Studio完全忽略了我实际上指定它使用另一个清单文件......同时虽然看起来我正在构建正确的变体构建.

我会对此进行任何评论/分析 - 即使只是为了确认我对原因的看法

我当前设置的屏幕截图

(在此屏幕截图中,我已经体验过删除主/共享androidmanifest文件,但否则完成)

最近更新

我得出结论味道不起作用/我的gradle设置必定是错误的.如果我选择构建变体myflavourDebug Android studio不使用gradle中定义的清单文件.仅此一点就足以得出问题依赖的地方.

也许我的gradle文件在某种程度上是错误的,我不知道,但我已经非常谨慎地让我正确.如果有人在赏金活跃时发布asnwer,我会尝试快点并分配.

Ben*_*bau 4

我认为问题就在这里:

applicationId "com.myflavour.app"
Run Code Online (Sandbox Code Playgroud)

com.myflavour.app您可以在 build.gradle 中定义您的 applicationIs 。在您的 AndroidManifest 中,您指定

<activity android:name="com.shared.app.SharedMain"
    android:label="@string/MicMainName" >
Run Code Online (Sandbox Code Playgroud)

作为您的主要活动。如果我没记错的话,您的主要活动应该以您的 applicationId 命名。所以基本上,您应该尝试更改您的清单以说明您的活动并com.myflavour.app相应地安排您的包装,或者您可以仅使用相同的 applicationId 来满足您的风格。