2012-01-18 15 views
2

私は、このサイトやその他の情報を、Androidにあらかじめ埋め込まれたsqliteデータベースを含めるための最良の方法について収集しています。私はちょっと些細なことが必要な理由を理解していることを確認したいと思います...そうではありません。あらかじめ設定されたAndroidデータベース:作品をまとめようとしています

私の次の結論が正しいか?:間違っているのであれば、誰かが私に教えてください可能性が

  • 主な理由多くの人々示唆資産フォルダから事前にデータベースファイルをコピーする「/データ/データ/ YOUR_PACKAGE/databases/"は、がアセットフォルダ内のデータベースファイルにアクセスしていないか、そうしすぎると(?)と表示されないためです。この2つの回答のどちらが正しいかはっきりさせることができますか?
  • 資産フォルダ内のデータベースファイルは、その場所のファイルを更新できないため、別の場所にコピーする必要があります。それで、assetsフォルダ内のデータベースを開くことができたとしても、このようなデータベースを変更する必要がない場合にのみ有効です。 更新日:私はこの問題に焦点を当てた新しいスレッドを開始しました:Opening a read only database directly in the assets folder
  • assetsフォルダ内のファイルは、(mp3などの特定のファイル拡張子がない限り)1Mbサイズのみです。この制限は、データベースが1Mbより小さい場合、または1Mbのチャンクでデータベースを分割し、実行時にそれらをまとめる気にならない場合、またはmp3拡張子を持つデータベースファイルを配布しても構いません。
  • データベースファイルがassetsフォルダから "/ data/data/YOUR_PACKAGE/databases /"にコピーされた場合、ファイルが重複しないようにassetsフォルダで元のデータベースファイルを削除する方法はありません。これは、assetsフォルダのファイルを変更できないためです。

もう少し複雑なパズルを作る:実際には別の場所に資産フォルダからデータベースをコピーShip an application with a database が2.3を実行している一部のデバイスでは動作しません:私はこの質問の受け入れ答えにコメントしてい+。それは正確ですか?それが当てはまる場合、最初の実行時にWebからデータベースファイルをダウンロードするのが最善の方法でしょうか?

ありがとうございます。

+1

これを読むと、http://www.mail-archive.com/[email protected]/msg28194.htmlアセット/生のフォルダにもサイズ制限があります。 –

+1

assetsフォルダ内のすべてが静的であり、変更できないため、コピーする必要があります。 –

+0

アセット、xmlドロアブルなどのリソースはapkに含まれているため、プログラムで更新することはできません。ルート権限はデータが「データ/データ」であることを確認するために必要です –

答えて

1

あなたは本来、apkを実際のデバイスのフォルダと混同しています。

apkをインストールパッケージと考えてください.Windowsのmsiと違います。このインストールパッケージの全目的は、コードとリソースを安全に認証してデバイスに配信することです。素朴な実装では、上記のコードを読み込み専用の場所に解凍し、そのリソースを読み書き可能な場所に保存しておきましょう。

スペースを節約するために、コードとリソースは決して署名されたアーカイブから離れることはありません。あなたはいつもあなたがに入れたものだと分かっており、コードを2回保管することでスペースを無駄にしません。クラスローダーには、クラスを即座に解凍することが可能な真の魔法がありますが、その点以外にもあります。

本質的に、この圧縮インストールパッケージのすべては、(署名されているために)読み取り専用です。 「インストーラ」であり、読み書き可能な場所に必要なリソースを移動するのはあなたの仕事です。もちろん、apkがいったん成立すれば、それはマルウェアを許可し、署名の目的を全面的に破ることができます。

これにより、混乱が解消されます。

+0

+1ありがとう@Delyan、あなたの答えはapkのすべてが読んだだけである理由を明確にしました。しかし、私のデータベースが読み込み専用であることを前提としています。最初に他の場所にコピーすることなく、apk(assetsフォルダ)の元の場所から開く方法はありますか? – Sergio

+0

私はそれを試していませんでしたが、 'file:/// android_asset/db.sqlite'が動作するかもしれません(3つのスラッシュに注意してください)。しかし、そうしなければ、その限界を乗り越えるためには、広範なハッカーが必要になるでしょう。 – Delyan

+0

私はちょうど私の質問のその部分のための別のスレッドを開いた:(http://stackoverflow.com/questions/8914673/opening-read-only-databases-in-the-assets-folder)。 私が最初に尋ねたことから、それでも最後の点は明らかではありません:データベースファイルを別の場所にコピーする方法が2.3 +を実行している特定のデバイスで失敗していると思われるので、まだ有効です。私の質問のリンク)。 @Delyanについて何か知っていますか?いずれにせよ、あなたは私の疑問のほとんどに答えましたので、私はあなたの答えを受け入れています。 – Sergio

関連する問題