我在MyAppApplication.onCreate()
方法中设置了一个断点。它受到1种产品风味的打击而不是另一种。这是唯一没有被击中的断点。我猜它与applicationId有关,但我不明白为什么,
的build.gradle
productFlavors {
prod { //the flavor that works
applicationId 'com.my.app'
versionName "1.2.3"
}
staging { //the flavor that doesnt
applicationId 'com.my.app.staging'
versionName "1.2.3-staging"
}
}
的AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.my.app">
...
<application android:name="com.my.app.MyAppApplication"
...
我已经尝试将清单包替换为$ {applicationId},但这给了我一个错误。包名称不会随着味道而改变,只会改变appliationId。据我所知,无论如何,在构建期间,manifest中的包名称会被gradle换掉。
答案 0 :(得分:2)
很难重复你的错误,这里有一些指导如何让你的应用程序多味,所以我希望你能通过关注它找到错误/错误的步骤
我用包创建了一个测试项目:klogi.com.flavourapp:
在应用的模块中,build.gradle
添加:
productFlavors {
production {
applicationId "klogi.com.flavourapp"
}
staging {
applicationId "klogi.com.flavourapp.staging"
}
}
为了显示风味效果,我将更改Toolbar
中的应用名称。为此,在FlavourApp\app\src
目录中创建目录staging\res\values
和strings.xml
文件:
然后,此FlavourApp\app\src\staging\res\values\strings.xml
的值将覆盖默认FlavourApp\app\src\main\res\values\strings.xml
。
最后一步是创建Application
的扩展程序:
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
Toast.makeText(getApplicationContext(), "Hi " + BuildConfig.FLAVOR, Toast.LENGTH_LONG).show();
}
}
并在AndroidManifest.xml
中分配:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="klogi.com.flavourapp">
<application
android:name=".MyApplication"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
我查了一下,android:name="klogi.com.flavourapp.MyApplication"
和android:name=".MyApplication"
之间没有区别,但我仍然认为第二个更好。
结果如下:
您可以找到测试项目: here ;
我希望,这有帮助