2016-08-19 13 views
0

私は、次のファイルをチェックして、私は取得していますエラーをチェックしてください実験のプラグインのAndroidメーカーJNI

を使用していないのAndroid Studioの2.1.2を使用しています。

私はこの問題を解決しました。編集したファイルは以下の通りです。彼らは私がそれを使用するようにプロパティを設定しているので、私はそれが正しい方法ではないかもしれないということを修正しました。実験的なプラグインは依然として不安定です。私はすぐに実験的なプラグインを試してみます。 4つのファイルメイン

のJNIフォルダにあるAndroid.mk

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 

LOCAL_MODULE := mylib 
LOCAL_SRC_FILES := HelloJni.cpp 

include $(BUILD_SHARED_LIBRARY) 

Application.mk

APP_ABI := all 

HelloJni以下のモジュール

sourceSets.main { 
     jniLibs.srcDir 'src/main/libs' 
     /*jni.srcDirs = [] not using this, I commented this. Please check SO links which explained when to use this and when not to use this*/ 
    } 

から

build.gradle .cpp

#include <jni.h> 
#include <Header.h> 

JNIEXPORT jstring JNICALL Java_com_example_m1035325_ndksampleapp_MainActivity_getStringFromJni(JNIEnv *env,jobject thiz) 
{ 
env-> NewStringUTF ("Hellofrom JNI!"); 
} 

HEADER.H

#include <jni.h>; 
using namespace std; 

#ifndef HEADER 
#define HEADER 

extern "C" { 
JNIEXPORT jstring JNICALL Java_com_example_m1035325_ndksampleapp_MainActivity_getStringFromJni(JNIEnv *env, jobject obj); 
} 

#endif //NDKSAMPLEAPP_HEADER_H 

ここMainActicity.java

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

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     TextView tvHello=(TextView)findViewById(R.id.tvHello); 
     tvHello.setText(getStringFromJni()); 
    } 

    public native String getStringFromJni(); 

それがJNI機能に対応する

私が設定されている解決することはできません示しgetStringFromJni私はこの方法でホバープロジェクト構造内およびパス環境変数内のNDKパス。

私は次のようなエラーに

Process: com.example.m1035325.ndksampleapp, PID: 12831 
                        java.lang.UnsatisfiedLinkError: No implementation found for java.lang.String com.example.m1035325.ndksampleapp.MainActivity.getStringFromJni() (tried Java_com_example_m1035325_ndksampleapp_MainActivity_getStringFromJni and Java_com_example_m1035325_ndksampleapp_MainActivity_getStringFromJni__) 
                         at com.example.m1035325.ndksampleapp.MainActivity.getStringFromJni(Native Method) 

を取得しています私はまた、SOに多くのことを探索したが、私は逃したものを得ていないのですか?

上記のエラーは修正されていません。この質問に対する私の答えをチェックしてください。私は問題があなたのAndroid.mkファイル内にあると思い

+0

あなたは 'JNICALL'がありません。署名は' JNIEXPORT jstring JNICALL'、 – marcinj

+0

で始まります。はい。それで合っています。私はファイルに追加しました。上記の私の編集したファイルを確認してください。 – AdiAtAnd

答えて

0

android.useDeprecatedNdkのAndroid Studioバージョン2.1.2へ=真

ので、その関連は、次の通りである:それはする必要がありますこのバージョンでは、実験的なプラグインがデフォルトのオプションとして使用されており、私が使用しているアプローチは推奨されていません。 私はすぐに実験的なプラグインで試していきます。

1

LOCAL_SOURCE_FILE := HelloJni.cpp 

Androidのビルドシステム私の知る限りは、その名前の変数を使用しません。 、

私が作った一つの重要な変更は、ファイルgradle.propertiesである
LOCAL_SRC_FILES := HelloJni.cpp 
+0

入力いただきありがとうございます。私はこの変更を行いました。現在、ndk-buildでCPPファイルがコンパイルされています.PPPファイルでいくつかのエラーを修正した後、例えばNewStringUTF関数呼び出しなどでndk-build .soが生成されましたが、 UnsatisfiedLinkError "と表示されます。 MainActivityクラスには、ネイティブメソッドにカーソルを置くと、対応するJNI関数を解決できないことが示されます。あなたはこれに関して私を助けてくれますか? – AdiAtAnd

+0

MainActivity.javaのインポートがありません。Android UIファイルですか? – AdiAtAnd

関連する問題