我刚刚在Android Studio中使用Gradle设置了构建变体。对于典型的演示/专业设置,这将是多么幸运。我能够很好地启动我的“demoDebug”应用程序。当我以相同的配置切换到'proDebug'和'Run'时,它可以很好地安装pro应用,但启动时会崩溃:
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.anthonymandra.rawdroidpro/com.anthonymandra.rawdroid.RawDroid } Error type 3 Error: Activity class {com.anthonymandra.rawdroidpro/com.anthonymandra.rawdroid.RawDroid} does not exist.
如果然后转到仪表板,则可以启动专业版,它可以按预期运行。因此,安装适用于适当的版本;在启动中(专业版)只有一些错误。
build.gradle口味:
productFlavors {
demo {
packageName "com.anthonymandra.rawdroid"
}
pro {
packageName "com.anthonymandra.rawdroidpro"
}
proAmazon {
packageName "com.anthonymandra.rawdroidpro"
}
}
更新资料
清理与该问题无关的无关信息
当我反编译apk时,我确认在Android.manifest中没有实现gradle替代。
最佳答案
首先,您应该以类似的方式使用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将进行必要的包名称更改,并进行构建。
同样在我的机器上也能正常工作,我能够在设备中看到两种不同口味的两个不同应用程序。
关于android - Android Gradle Build Variant Deploy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21820961/