구현한 네이티브 메서드를 액티비티에서 호출해 보자. 네이티브 메서드를 호출하기 위해서는 우선 네이티브 라이브러리를 메모리에 적재해야 한다.
Copy package kr . pe . burt . hellojni ;
import android . support . v7 . app . AppCompatActivity ;
import android . os . Bundle ;
import android . view . Menu ;
import android . view . MenuItem ;
public class MainActivity extends AppCompatActivity {
...
static {
System . loadLibrary ( "hello-jni" );
}
}
Copy .. .
android . ndk {
moduleName = "hello-jni"
}
.. .
이제 프로젝트를 빌드해본다. 터미널창을 열어서 해도 되고 Build > Rebuild Project
를 실행해도 된다.
Copy $ ./gradlew
:help
Welcome to Gradle 2.5.
To run a build, run gradlew <task> ...
To see a list of available tasks, run gradlew tasks
To see a list of command-line options, run gradlew --help
To see more detail about a task, run gradlew help --task <task>
BUILD SUCCESSFUL
Total time: 9.599 secs
This build could be faster, please consider using the Gradle Daemon: http://gradle.org/docs/2.5/userguide/gradle_daemon.html
$
이제 앱을 실행해 보자. Run > Run app
메뉴를 실행해서 앱이 안드로이드 디바이스에 잘 올라가는지 확인한다.
Copy <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
<TextView
android:id="@+id/textView"
android:text="@string/hello_world"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Get Message"
android:id="@+id/button"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:onClick="buttonClicked"/>
</RelativeLayout>
레이아웃을 파일 작성하고 아래와 같이 구현 코드를 작성한다.
Copy package kr . pe . burt . hellojni ;
import android . support . v7 . app . AppCompatActivity ;
import android . os . Bundle ;
import android . view . Menu ;
import android . view . MenuItem ;
import android . view . View ;
import android . widget . TextView ;
public class MainActivity extends AppCompatActivity {
TextView textView = null ;
public native String getMessage ();
@ Override
protected void onCreate ( Bundle savedInstanceState) {
super . onCreate (savedInstanceState);
setContentView( R . layout . activity_main ) ;
textView = (TextView) findViewById( R . id . textView ) ;
}
@ Override
public boolean onCreateOptionsMenu ( Menu menu) {
getMenuInflater() . inflate ( R . menu . menu_main , menu);
return true ;
}
@ Override
public boolean onOptionsItemSelected ( MenuItem item) {
int id = item . getItemId ();
if (id == R . id . action_settings ) {
return true ;
}
return super . onOptionsItemSelected (item);
}
public void buttonClicked ( View view) {
String msg = getMessage() ;
textView . setText (msg);
}
static {
System . loadLibrary ( "hello-jni" );
}
}
실행하면 아래와 같다.
버튼을 누르면 네이티브 메서드를 호출해 가져온 문자열을 텍스트뷰에 설정하는 것을 확인할 수 있다.