私は以下を使用しています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。rel
dev
アプリケーションはうまく構築applicationId
され、同じデバイスに別々にインストールされます。
フレーバーについては、rel
すべてがうまく機能し、applicationId = 'com.example.app'
元のパッケージ名と実際のソース パッケージ名と同じです。
dev
しかし、私は非常に奇妙な行動を得て、フレーバーを探します。applicationId = 'com.example.app.dev'
まず、アニメーションが正しく動作していないことがわかりました。これは、アニメーションが間違った座標になっているように見えるからです。
第二に、動的に膨張するビューを持つ多くのフラグメントがあり、それらは部分的に表示されているか、まったく表示されていません-実行ごとに異なります。
問題は、クラスのパッケージ名が同じであり、おそらくクラスの識別が非常に曖昧であることです。
getContext() が両方のフレーバーに対して同じクラス「com.example.app.MainActivity」を返すことがわかり、これは問題だと思います。
私はそこに変更を加える必要がないので、各ソースセットの下にすべてのソースをコピーしたくありません - コードは同じです。
解決策とは?