2017-02-06 10 views
1

アンドロイドスタジオの ".so"(共有ライブラリ)内にメソッド "callMethod()"を使用するには、いくつかの助けが必要です。その後、私はパット(armeabi、armeabi-v7a、x86の) :アンドロイドスタジオの.so共有ライブラリ内のメソッドを呼び出す

マイアンドロイドスタジオバージョンは、私は "SRC /メイン/" は、それから私はjniLibsフォルダ内の3つのフォルダを作成してjniLibsフォルダを作成2.1.3

です上記のフォルダ内の.soライブラリ。その後 は、私は以下のようbuild.gradleを更新:私は何をすべきかわからない。その後

static { 
     System.loadLibrary("SharedLibAndroid"); 
    } 

compile fileTree(dir: 'libs', include: ['*.jar','.so']) 

をMainAcrivityのJavaクラスでは、私はこれを書きましたの?

「callMethod()」というメソッドを.soライブラリから呼び出すにはどうすればいいか説明してください。

私は多くを検索しましたが、私はそれを行う方法の完全な例を見ませんでした。

ありがとうございました。

My Update

私は以下のように私のプロジェクト新しいクラスとネイティブメソッドに追加した:

@SuppressWarnings("JniMissingFunction") 
public class Test1Cpp { 
static { 
    System.loadLibrary("Cpp"); 
} 

public native String callMethod(); 
} 

その後、私は.soの共有ライブラリ内のメソッドを呼び出すことができ、

を、私は別の問題に直面し、私の.soライブラリはすべてのプラットフォームのモバイルでは機能しませんでした

エラーは次のとおりです:

java.lang.UnsatisfiedLinkError: dlopen failed: "/data/app/com.mysecondtestapp-1/lib/arm/libCpp.so" has unexpected e_machine: 3

私の質問:どのように私の.soライブラリをすべてのプラットフォームの携帯電話で動作するように変換するのですか?

答えて

0

私はライブラリが読み込まれると仮定します。そうでなければ、例外が発生します。あなたがそれを述べたと思います。したがって、ライブラリから使用したいネイティブメソッドを宣言し、それを呼び出す必要があります。ここで簡単な例を見ることができます:Sample: hello-jni

サンプルソースコードはHello JNIです。

+0

あなたの答えに感謝yakobomが、あなたの例では、共有ライブラリを読み込んで使用する方法がわかりませんでした。 一方、アンドロイドスタジオで共有ライブラリをリンクして使用する方法についていくつかの詳細が必要です。 –

+0

私が言ったように、あなたは読み込みエラーを示していないので、読み込みに問題はないと思いました。とにかく - あなたがしなければならないすべてのことを私があなたに教えてくれたリンクですが、実際の例を見たい場合は、ソースコードを見てください(私の答えは更新しました) – yakobom

+0

あなたのフォローアップのために@yakobomに多くの感謝、 私はhello-jniサンプルとstatic {System.loadLibrary( "hello-jni"); }。しかし、生成された共有ライブラリ(.so)が表示されませんでした。 .cファイルを削除するとプロジェクトが実行されず、エラーが発生しました。 java.lang.UnsatisfiedLinkError:実装が見つかりませんでしたjava.lang.String com.example.hellojni.HelloJni。stringFromJNIは() だから、それはそうでないかもしれないの.soライブラリ –

関連する問題