0

私の Androdi アプリには、異なる SQL 実装を使用する必要がある 2 つの異なる falvour があります。1 回の使用:

android.database.sqlite.SQLiteDatabase

そして2番目:

net.sqlcipher.database.SQLiteDatabase

私はそのような方法を持っています:

getAll(SQLiteDatabase conn)

コピー&ペーストを避けるために、この状況をどのように解決すればよいですか? ベストプラクティスは何ですか? 私にはいくつかのアイデアがあります: 最初の 1 つ (多くのコピーペーストで最悪) は、さまざまな方法を提供することです:

 getAll(android.database.sqlite.SQLiteDatabase conn)
 getAll(net.sqlcipher.database.SQLiteDatabase conn)

2番目は、適切なデータベースをインポートするすべてのフレーバーでこのクラスを他のクラスでラップすることです(集約、SQLiteDatabaseとしての構成は最終です):

import android.database.sqlite.SQLiteDatabase;
public class SQLliteDatabaseFlavoured   {
     SQLiteDatabase sqLiteDatabase;
}

使用法:

getAll(SQLliteDatabaseFlavoured.SQLiteDatabase conn)
4

2 に答える 2

0

わかりました@Jimの回答に基づいて、最終的に解決策を見つけました。本当にありがとう!

それは最もきれいではありませんが、うまくいきます。ファイルをコピーする 2 つのタスクを作成します

task copyNoEncryption << { 
//copy to temp folder
copy {
    from("src/com/sql")
    into("src/temp/sql")
}
//copy back to correct folder and replace string's
copy {
    from("src/temp/sql")
    into("src/com/sql")

    filter {
 //you have to remember that first argument is REGEX and second is normal String
        String line ->
            line.replaceAll("before REGEX",
                    "after STRING")
    }
}
//delete temp folder
delete("src/temp")
}

2番目のタスクは同様に機能します

task copyEncryption << {
//same body but reverse string swap 
//REMEMBER in replaceAll 1st arg is REGEX and second is String
}

今、それぞれフレーバーの前にこのタスクの実行を追加しています

android.buildTypes.all{ theBuildType ->
tasks.whenTaskAdded{ theTask ->
    if(theTask.name == "generateFlavorWithoutEncryptionr${theBuildType.name.capitalize()}Sources"){
        theTask.dependsOn "copyNoEncryption"
    }
    else if(theTask.name == "generateFlavourWithEncryption${theBuildType.name.capitalize()}Sources"){
        theTask.dependsOn "copyEncryption"
    }
}
}

今では、フレーバーを構築するたびに、正しいライブラリを使用しています。いつかこれが誰かを助けることを願っています。

于 2015-12-03T19:22:25.673 に答える