我刚刚在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 。
答案 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 ---,你在开玩笑吧......”