9

ネイティブ ライブラリを使用する必要があるsqlitecipherライブラリを使用しようとしています。彼らのチュートリアルはとてもシンプルですが、私にはうまくいきません。次のエラーが発生するたびに:

FATAL EXCEPTION: main
        java.lang.UnsatisfiedLinkError: Couldn't load stlport_shared from loader dalvik.system.PathClassLoader[dexPath=/data/app/org.example.test-2.apk,libraryPath=/data/app-lib/org.example.test-2]: findLibrary returned null
        at java.lang.Runtime.loadLibrary(Runtime.java:365)
        at java.lang.System.loadLibrary(System.java:535)
        at net.sqlcipher.database.SQLiteDatabase.loadLibs(SQLiteDatabase.java:141)
        at net.sqlcipher.database.SQLiteDatabase.loadLibs(SQLiteDatabase.java:136)

これは、コンパイル中に .so ファイルが添付されなかったことを意味します。

3 つのファイルはすべて /libs/armeabi/ ディレクトリに保存されます。

問題は、maven を使用して依存関係を管理していることだと思いました (ビルドはとにかく Android Studio を使用して実行されます)。次の試み - これらのライブラリを Maven の依存関係に含めます。ドキュメントによると、それは非常に簡単です。パブリックリポジトリでそれらを見つけることができなかったので<scope>system</scope> 、タグで使用しました。それらは表示されましたが、機能しませんでした。後で、スコープ「システム」が機能しないと言われているこのリンクを見つけ、それらのライブラリをローカルリポジトリに追加しようとしました

mvn install:install-file -DgroupId=net.sqlitecipher -DartifactId=stlport_shared -Dversion=1.0 -Dfile=libstlport_shared.so -Dpackaging=so -DgeneratePom=true

結局 - うまくいきませんでした。

また、このトピックを見ました。おそらくこれは解決策ですが、現在gradleは使用していません。maven から gradle に移行せずに .so ファイルを apk に含める方法はありますか?

私が理解しているように、Android Studio は内部的に gradle を使用して apk を構築しているため、ネイティブ ライブラリのサポートが開始されるまで、maven を使用したすべての努力は役に立ちません。また、Intellij IDEA Cardea (13.0) を使用してプロジェクトをビルドしようとしましたが、残念ながら成功しませんでした。

4

3 に答える 3

10

ネイティブ ライブラリが /libs/armeabi/ にあるとすぐに、Android プラグインを適切に構成するだけです。このようなもの:

<plugin>
    <groupId>com.jayway.maven.plugins.android.generation2</groupId>
    <artifactId>android-maven-plugin</artifactId>
    <configuration>
         <nativeLibrariesDirectory>${project.basedir}/libs</nativeLibrariesDirectory>
         ...
    </configuration>
    <extensions>true</extensions>
</plugin>
于 2013-08-22T12:48:04.297 に答える
1

質問 1 へ: はい。私は以前にこの特定の問題を抱えたことはありませんが、一般的に、グラドルに切り替える必要はありません。Ant タスクを使用して SO ファイルを APK に追加することができます。また、maven は Ant タスクを実行できるため、可能です。

ここで見つけnativeLibsToJarは、すべての SO ファイルを ZIP ファイルに入れ、ZIP の代わりに拡張子 JAR を使用するタスクに他なりません。Ant タスクの Zip を使用して簡単に行うことができます(さらにrenameを追加することもできます)。

質問 2 へ: いいえ。最初の回答のためです。「ネイティブ ライブラリをサポートする Maven」は必要ありません。Ant をビルドシステムとして使用するだけです。

于 2013-08-22T10:30:19.417 に答える