Android应用程序类没有使用备用产品风格调用onCreate

时间:2016-01-15 01:59:24

标签: android android-gradle android-manifest

我在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换掉。

1 个答案:

答案 0 :(得分:2)

很难重复你的错误,这里有一些指导如何让你的应用程序多味,所以我希望你能通过关注它找到错误/错误的步骤

我用包创建了一个测试项目:klogi.com.flavourapp:

  1. 在应用的模块中,build.gradle添加:

    productFlavors {
        production {
            applicationId "klogi.com.flavourapp"
        }
    
        staging {
            applicationId "klogi.com.flavourapp.staging"
        }
    }
    
  2. 为了显示风味效果,我将更改Toolbar中的应用名称。为此,在FlavourApp\app\src目录中创建目录staging\res\valuesstrings.xml文件:

    enter image description here

    然后,此FlavourApp\app\src\staging\res\values\strings.xml的值将覆盖默认FlavourApp\app\src\main\res\values\strings.xml

  3. 最后一步是创建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"之间没有区别,但我仍然认为第二个更好。

  4. 结果如下:

    enter image description here enter image description here

    您可以找到测试项目: here ;

    我希望,这有帮助