Android Gradle Build Variant Deploy

时间:2014-02-17 04:47:47

标签: android deployment gradle android-studio

我刚刚在Android Studio中使用Gradle设置了构建变体。对于典型的演示/专业设置来说,这将是多么美好的祝福。我能够很好地启动我的'demoDebug'应用程序。当我使用相同的配置切换到'proDebug'和'Run'时,它会安装专业应用程序,但崩溃启动它:

  

开始:意图{act = android.intent.action.MAIN   猫= [android.intent.category.LAUNCHER]   CMP = com.anthonymandra.rawdroidpro / com.anthonymandra.rawdroid.RawDroid   } 错误类型3错误:活动类   {com.anthonymandra.rawdroidpro / com.anthonymandra.rawdroid.RawDroid}   不存在。

如果我转到仪表板,我可以启动专业版,它可以按预期工作。因此安装适用于适当的版本;发布时只有一些错误(专业版)。

build.gradle flavors:

productFlavors {
    demo {
        packageName "com.anthonymandra.rawdroid"
    }

    pro {
        packageName "com.anthonymandra.rawdroidpro"
    }

    proAmazon {
        packageName "com.anthonymandra.rawdroidpro"
    }
}

更新

清理了与问题无关的无关信息

当我反编译apk时,我确认在Android.manifest中实现了gradle覆盖的 none

2 个答案:

答案 0 :(得分:1)

首先,您应该以类似的方式使用packagename(建议的方法不是强制性的):

youractualapplicationpackage.flavorname

但是你可以根据你的情况选择packagname任意你想要的口味:

productFlavors {
    demo {
        packageName "com.anthonymandra.rawdroiddemo"
    }

    pro {
        packageName "com.anthonymandra.rawdroidpro"
    }

    proAmazon {
        packageName "com.anthonymandra.rawdroidpro"
    }
}

确保 com.anthonymandra.rawdroid 是main / java目录中应用程序的java包。

您的 AndroidManifest.xml 应该是这样的(仅在主目录中):

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.anthonymandra.rawdroid" >

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >

    <activity
      android:name=".RawDroid"
      android:configChanges="keyboardHidden|orientation|screenSize"
      android:label="@string/app_name"
      android:theme="@style/GalleryTheme" >
        <intent-filter>
           <action android:name="android.intent.action.MAIN" />

           <category android:name="android.intent.category.LAUNCHER" />
       </intent-filter>
 </activity>

</application>

</manifest>

它应该只在 main 目录中,而不是其他地方。

在编译时,gradle将执行必要的包名称更改并进行构建。

同样在我的机器上工作正常,我能够在我的设备中看到两种不同的应用程序,用于两种不同的风格。

答案 1 :(得分:0)

问题是:

'manifestmerger.enabled =假'。

我暂时禁用了该功能,因为它导致了库的问题。与此同时我忘了它,但显然图书馆合并也适用于gradle合并。我认为这有点意义,但他们确实需要允许在gradle合并和库合并之间进行分离。

感谢@ pyus13提供不间断的支持,直到我来到典型的“哦s ---,你在开玩笑吧......”