
こんにちは親愛なる読者!
この記事では、キリル文字データをSQLiteに保存する問題に対処し、Android NDKを理解し、一般的に素晴らしい人生を送りたいと思います! ただし、今後は最初の2つのポイントを重要視します。 それらについてお話します。
よく知られているSQLiteの問題は、ラテン語以外の文字が好きではないということです。したがって、 これは行われます[1] :
SELECT "" LIKE "";
0
SELECT "s" LIKE "S";
1
このような問題は緯度に関連しており、ユーザー定義の関数によって解決できます。
ただし、Androidは機能をサポートしていないため、松葉杖が作成されます。
Android NDK
読者の視野を広げ、適切な松葉杖を作成するには、 Android NDK [2]を使用することをお勧めします(ダウンロードして、アクセス可能なフォルダーに解凍します)
少し退屈
Android NDKは、C / C ++コードをAndroidプラットフォームのネイティブコードにコンパイルするためのツールです。 さらに、多くのAndroidライブラリが提供されているため、プログラムの特定の集中セクションをC / C ++で記述し、Javaで使用できます。
NDKはAndroid 1.5以降でサポートされており、次のARMv5TEプロセッサアーキテクチャ(Thumb-1命令を含む)、ARMv7-A(Thumb-2およびVFPv3-D16命令を含み、オプションでNEON / VFPv3-D32をサポート)
将来のリリースではx86サポートが約束されます
つまり、このツールを使用します!
だから...
私たちは何をしますか? ソースコードsqliteとicuを組み合わせます。
必要なライブラリとソースを検索するプロセスに負担をかけないために、コンパイル用に組み立てられたキットがここで提案されています[3] 。 何か余分なものが誤ってオンになった場合、私は謝罪します。
コンパイルプロセスに興味がない場合は、コンパイルされたライブラリをここからダウンロードでき[7] 、いくつかのポイントをスキップできます
ファイルをダウンロードした後、解凍し、プロジェクトにこれを配置します
プロジェクト/ jni
プロジェクトの今後の予定-プロジェクトが完了するまで完了させます
コンパイル手順に進む前に、いくつかのファイルの構造に注目してください。
common / Android.mk
将来のライブラリ、さまざまなフラグ、ビルドオプションに含まれるすべてのソースファイルについて説明します。
common / android_sqlite ...
これらのファイルは、Javaからデータベースと対話するためのインターフェースと同様に、データベースへのアンドロイドのようなアクセスを提供します。
関数のシグネチャに注意してください
void Java_biz_sneg_sqlite_SQLiteDatabase_closedb()
ネイティブ関数を正常に使用するには、それらを
Java____
の形式で記述する必要があります
個人的には見逃したため、地理距離関数(x1、y1、x2、y2)もオンにしました。
目的の機能を簡単に接続できるようになりました。sin、cos、またはexoticです。
ライブラリのコンパイルと接続
最初に、額の解決策が機能しないため、Windowsの手順を説明します。
一度やってください! Cygwin [6]をダウンロードしてインストールします。インストール中に、インストールするDevelパッケージを選択します。 そして...それは地獄のように長いので、一時的に眠りや他の楽しいもののために引退します。 ただし、間違ったサーバーを選択しただけかもしれません。
二回やる! Cygwinコンソール(他のOSのコンソールのみ)を起動し、プロジェクトディレクトリに移動します。
Windows:
$ cd /cygdrive/project/jni
Non-windows:
$ cd project/jni
3つやって! NDKを起動する
Windows:
$ /cygdrive/ndk-path/ndk-build
Non-windows:
$ ndk-path/ndk-build
projectはプロジェクトへのパス、ndk-pathはNDKを解凍したパスです
コンパイルプロセスが開始されます。
...
Compile++ thumb : android_sqlite <= tmutfmt.cpp
Compile++ thumb : android_sqlite <= colldata.cpp
Compile++ thumb : android_sqlite <= bmsearch.cpp
Compile++ thumb : android_sqlite <= bms.cpp
Compile++ thumb : android_sqlite <= currpinf.cpp
Compile++ thumb : android_sqlite <= uspoof.cpp
Compile++ thumb : android_sqlite <= uspoof_impl.cpp
...
起動しない場合は、O_oに同情します
出力では、パスproject / libs / armeabi / libandroid_sqlite.soに沿ってコンパイル済みライブラリを取得する必要があります
ここで、ライブラリをプロジェクトに接続する必要があります。
まず、メインアクティビティでその接続を記述する必要があります
public class MainActivity extends TabActivity { static { System.loadLibrary("android_sqlite"); } ... }
次に、ネイティブライブラリで動作するコードが必要です。 ここからダウンロードできます[4]
仕事の仕方は?
どのように、どのように、座って行きました!
ベースを開きます
try { dataBase_ = new biz.sneg.sqlite.SQLiteDatabase(DB_NAME); } catch (Exception e) { Log.wtf("Database", e); }
何らかの方法でデータを取得します
try { biz.sneg.sqlite.SQLiteCursor cursor = dataBase_.query("SELECT * FROM tablename WHERE rus_text_field LIKE ?", new Object[]{"%"}); List<Map<String, String>> results = new ArrayList<Map<String,String>>(); while (cursor.next()) { final int columnCount = cursor.count(); HashMap<String, String> currentMap; currentMap = new HashMap<String, String>(); for (int i = 0; i < columnCount; i++) { currentMap.put(cursor.columnName(i), cursor.stringValue(i)); } results.add(currentMap); } cursor.dispose(); } catch (Exception e) { Log.wtf("Database", e); }
一般的に、私はあなたに幸運を祈ります!
アイデアとアセンブリの作成者、ニコライ・クダショフ、招待状はここに送信できますdrklo.2kb <famous_symbol> gmail.com
参照:
1. SQLiteおよび完全なUNICODE
2. Android NDK
3. ライブラリのソース
4. Javaのソース
5. SQLite
6. Cygwin
7. コンパイルされたライブラリ