1

私は以下を使用していますbuild.gradle

apply plugin: 'com.android.application'

def final appId = "com.example.app"

android {
    compileSdkVersion 23
    buildToolsVersion '24.0.1'

    defaultConfig {
        vectorDrawables.useSupportLibrary = true
        applicationId appId
        buildConfigField "String", "DBNAME", "\"mydb.db\""
    }

    testOptions {
        unitTests.returnDefaultValues = true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFile 'proguard-rules.pro'
        }
    }
    productFlavors {
        rel {
            minSdkVersion 14
            applicationId = "${appId}"
            buildConfigField "String", "DBNAME", "\"mydb.db\""
            targetSdkVersion 23
            versionCode 33
            versionName '1.4'
        }
        dev {
            minSdkVersion 14
            applicationId =  "${appId}.dev"
            buildConfigField "String", "DBNAME", "\"mydb_dev.db\""
            targetSdkVersion 3
            versionCode 1
            versionName '1.4-beta'

        }
    }
}

...

とソース セットmainからコードをコピーしておらず、フレーバーごとに個別のファイルを作成しただけです: res/values/strings.xml、res/values/colors.xml、google-service.json。reldev

アプリケーションはうまく構築applicationIdされ、同じデバイスに別々にインストールされます。

フレーバーについては、relすべてがうまく機能し、applicationId = 'com.example.app'元のパッケージ名と実際のソース パッケージ名と同じです。

devしかし、私は非常に奇妙な行動を得て、フレーバーを探します。applicationId = 'com.example.app.dev'

まず、アニメーションが正しく動作していないことがわかりました。これは、アニメーションが間違った座標になっているように見えるからです。

第二に、動的に膨張するビューを持つ多くのフラグメントがあり、それらは部分的に表示されているか、まったく表示されていません-実行ごとに異なります。

問題は、クラスのパッケージ名が同じであり、おそらくクラスの識別が非常に曖昧であることです。

getContext() が両方のフレーバーに対して同じクラス「com.example.app.MainActivity」を返すことがわかり、これは問題だと思います。

私はそこに変更を加える必要がないので、各ソースセットの下にすべてのソースをコピーしたくありません - コードは同じです。

解決策とは?

4

1 に答える 1

0

解決するのに何時間もかかる誤入力でした...

targetSdkVersion 3むしろ指摘したtargetSdkVersion 23

(全然建っていたのにビックリ)

問題は解決しました。Android フレーバーは素晴らしいです!

于 2016-10-29T00:27:25.557 に答える