본문 바로가기
프로그래밍/Android

JNI에서 java class 메소드 사용하기

by 즉흥 2016. 9. 5.
728x90
반응형




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package com.android.test;
 
import android.app.Application;
import android.content.Context;
import android.util.Log;
import android.widget.Toast;
 
public class DemoApplication extends Application {
    private static DemoApplication sInstance;
 
    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        sInstance = this;
    }
 
    public static DemoApplication getInstance() {
        //Log.d("TR", "DemoApplication.getInstance:" + Log.getStackTraceString(new Throwable()));
        return sInstance;
    }
 
    public static void forgeryDetected(){
        Toast.makeText(sInstance, "ForgeryDetected", Toast.LENGTH_SHORT).show();
    }
    public static void DebugDetected(){
        Toast.makeText(sInstance, "DebugDetected", Toast.LENGTH_SHORT).show();
    }
    public static void RootDetected(){
        Toast.makeText(sInstance, "RootDetected", Toast.LENGTH_SHORT).show();
    }
}
 
cs

DemoApplication이라는 이름의 java 파일을 생성.

이름 바꿔도 됨.


1
2
3
jclass clsApplication = env->FindClass("com/android/test/DemoApplication");
jmethodID midGetInstance = env->GetStaticMethodID(clsApplication, "forgeryDetected""()V");
env->CallStaticVoidMethod(clsApplication, midGetInstance);
cs

JNI에서 해당 java 파일 읽어와서(FindClass) 메소드 주소를 얻고(GetStaticMethodID) 메소드를 실행한다(CallStaticVoidMethod).


사용하려는 메소드가 void 형 반환값이기에 CallStaticVoidMethod를 사용했고 자료형에 따라 함수가 조금씩 다르다.


이 정도만 기억하면 나중엔 키워드로 검색하기 쉽겠지.

728x90
반응형

댓글