16

AndroidプロジェクトでSQLCipherとともにOrmLiteを使用したいのですが、どちらのライブラリにも独自の抽象SQLiteOpenHelperクラスを実装する必要があります。Javaでは、クラスが2つのクラスを拡張することは許可されておらず、別々に実装すると、それらは相互に通信しません。

どうすれば両方を一緒に使用できますか?SQLiteOpenHelper実装の問題を解決するにはどうすればよいですか?

4

5 に答える 5

6

Rejinderiによる回答をORMLite 4.43のパッチにまとめ、 JAR ファイルにコンパイルしました。これを Android プロジェクトに統合するには、次の手順を実行します。

  1. SQLCipher for Android HOWTOに従って、 SQLCipher をプロジェクトに組み込みます。
  2. プロジェクトに ORMLite を追加します ( SQLite および Android で ORMLite を使用するための優れたチュートリアルとは を参照してください) 。
  3. libs/ormlite-android.jarと置き換えますormlite-android-sqlcipher.jar
  4. シークレット データベースのパスワードを適切な DB オープン メソッドに追加します。

ただし、私が未操作の JAR ファイルを提供し、代わりにパッチのビルド手順に従うとは信じないでください。

編集:パッチを当てたライブラリでは、 への呼び出しgetReadableDatabase()getWritableDatabase()およびOrmLiteSqliteOpenHelperコンストラクターにパスワードを追加パラメーターとして渡す必要があります。DB ヘルパーを使用している場合は、適切に拡張してパスワードを OrmLiteSqliteOpenHelper に渡します。

于 2013-02-08T14:30:03.913 に答える
4

AndroidでORMLiteとSQLCipherを一緒に使用するにはどうすればよいですか?

@Brunoが可能であるはずです。

うまくいく1つの方法は、ORMLiteのOrmLiteSqliteOpenHelperクラスをプロジェクトにコピーし、名前をLocalOrmLiteSqliteOpenHelperまたは何かに変更し、基本クラスをSQLCipherヘルパークラスに変更することです。彼らがクラスの名前をに変更しなかったなんて信じられませんSQLCipherSQLiteOpenHelper。(不平を言う)

public abstract class LocalOrmLiteSqliteOpenHelper
    extends info.guardianproject.database.sqlcipher.SQLiteOpenHelper {

もう1つの方法は、ヘルパーにSQLCipherSQLiteOpenHelperを拡張させてから、必要なさまざまなものをOrmLiteSqliteOpenHelper自分で実装することです。ただし、これにはもう少し作業が必要です。ORMLiteは、データベースの作成中にデータベース接続を少し調整する必要があります。そうしないと、再帰的になります。

これらのいずれかが機能するかどうかを教えてください。

于 2012-02-07T17:30:22.340 に答える
3

これについて助けが必要な人を更新するために、ormlite のAndroid ソース部分全体をプロジェクトにコピーし、Android の db パッケージのすべての参照のインポートを SQLCipher のバージョンに変更できます。

基本的に、android.database.sqliteに一致するすべてのパッケージをnet.sqlcipher.databaseに変更する必要があります。

たとえば、

import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import net.sqlcipher.database.SQLiteDatabase;
import net.sqlcipher.database.SQLiteOpenHelper;

その後、db password パラメータを AndroidConnectionSource.java の getWriteableDatabase の呼び出しに入れます。

于 2012-11-01T02:46:07.887 に答える
1

私はこれがかなり古いスレッドであることを知っています。しかし、私は最近同じように行かなければなりませんでした。解決策を探すために、2 つのスレッドを読みました: thisthis

  1. 私は ge0rg の答えに従いましたが、ほとんどうまくいきましたが、いくつかの問題があり、コード内のメソッドを置き換える必要がありました (回避したかったのです)。
  2. Eliott Roynetteがここで提案したことを実行しましたが、パスワードを受け入れるためにヘルパークラスにメソッドを1つ追加する必要があったことを除いて、うまくいきました。
  3. コードを混在させるのではなく、よりスマートなソリューションを実現するためにコードを lib に除外したかったので、lib/module を個別にビルドしました。

そして今、私は機能するソリューションを持っています (GitHub から動作するデモを複製できます)。将来他の人を助けるために両方のスレッドに私の答えを入れてください。

于 2014-09-18T09:11:23.827 に答える