Merge pull request #829 from xianglin1998/master

Android library reused.
This commit is contained in:
Philippe Teuwen 2020-07-05 11:33:30 +02:00 committed by GitHub
commit dfb6b8a69e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 157 additions and 130 deletions

View file

@ -1,12 +1,6 @@
# version # version
cmake_minimum_required(VERSION 3.4.1) cmake_minimum_required(VERSION 3.4.1)
# We are build on android platform, so we need add def "ANDROID"
# NDK version for SDK 19 doesn't implement the whole C++11 standard in the STL.
# see: https://stackoverflow.com/questions/44736135/ndk-clang-error-undefined-reference-to-localeconv
# so we need add def getlocaledecpoint()='.'
add_definitions(-DANDROID -D"getlocaledecpoint\(\)='.'")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3 -fvisibility=hidden -w") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3 -fvisibility=hidden -w")
# Root path into client # Root path into client
@ -14,138 +8,170 @@ set(PM3_ROOT ../../)
add_subdirectory(../deps deps) add_subdirectory(../deps deps)
# Build zlib deps at external
if (CMAKE_MAKE_PROGRAM MATCHES ".*ninja.*")
set(BZIP2_INCLUDE_DIRS ${BZIP2_ROOT})
set(BZIP2_LIBRARIES pm3rrg_rdv4_bzip2)
find_library(pm3rrg_rdv4_bzip2 REQUIRED)
elseif (UNIX) # Cross compile at Unix Makefile System.
# bzip2 dep.
include(ExternalProject)
set(CFLAGS_EXTERNAL_LIB "CFLAGS=--target=${CMAKE_C_COMPILER_TARGET} -w")
set(BZIP2_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/deps/bzip2/src/bzip2)
ExternalProject_Add(bzip2
GIT_REPOSITORY https://android.googlesource.com/platform/external/bzip2
GIT_TAG platform-tools-30.0.2
PREFIX deps/bzip2
#SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/deps/bzip2
CONFIGURE_COMMAND mkdir -p ${BZIP2_BUILD_DIR} && git archive --format tar HEAD | tar -C ${BZIP2_BUILD_DIR} -x
BUILD_IN_SOURCE ON
BUILD_COMMAND make -C ${BZIP2_BUILD_DIR} -j4 CC=${CMAKE_C_COMPILER} CXX=${CMAKE_CXX_COMPILER} LD=${CMAKE_C_COMPILER} AR=${CMAKE_AR} RANLIB=${CMAKE_RANLIB} ${CFLAGS_EXTERNAL_LIB} libbz2.a
INSTALL_COMMAND ""
LOG_DOWNLOAD ON
)
ExternalProject_Add_StepTargets(bzip2 configure build install)
set(BZIP2_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/deps/bzip2/src/bzip2)
set(BZIP2_LIBRARIES ${CMAKE_CURRENT_BINARY_DIR}/deps/bzip2/src/bzip2/libbz2.a)
else ()
message(ERROR "Please implement your BZIP2 import.")
endif ()
# client resources # client resources
add_library(pm3rrg_rdv4 SHARED add_library(pm3rrg_rdv4 SHARED
${PM3_ROOT}/common/commonutil.c
${PM3_ROOT}/common/util_posix.c ${PM3_ROOT}/common/util_posix.c
${PM3_ROOT}/common/parity.c
${PM3_ROOT}/common/bucketsort.c
${PM3_ROOT}/common/crapto1/crapto1.c ${PM3_ROOT}/common/crapto1/crapto1.c
${PM3_ROOT}/common/crapto1/crypto1.c ${PM3_ROOT}/common/crapto1/crypto1.c
${PM3_ROOT}/common/crc.c ${PM3_ROOT}/common/crc.c
${PM3_ROOT}/common/crc16.c ${PM3_ROOT}/common/crc16.c
${PM3_ROOT}/common/crc32.c ${PM3_ROOT}/common/crc32.c
${PM3_ROOT}/common/crc64.c ${PM3_ROOT}/common/crc64.c
${PM3_ROOT}/common/cardhelper.c
${PM3_ROOT}/common/parity.c
${PM3_ROOT}/common/commonutil.c
${PM3_ROOT}/common/generator.c
${PM3_ROOT}/common/lfdemod.c ${PM3_ROOT}/common/lfdemod.c
${PM3_ROOT}/common/iso15693tools.c
${PM3_ROOT}/common/bucketsort.c
${PM3_ROOT}/common/legic_prng.c ${PM3_ROOT}/common/legic_prng.c
# client inside ${PM3_ROOT}/common/iso15693tools.c
${PM3_ROOT}/client/src/fileutils.c ${PM3_ROOT}/common/cardhelper.c
${PM3_ROOT}/client/src/uart/uart_posix.c ${PM3_ROOT}/common/generator.c
${PM3_ROOT}/client/src/loclass/cipherutils.c ${PM3_ROOT}/client/src/crypto/asn1dump.c
${PM3_ROOT}/client/src/loclass/cipher.c ${PM3_ROOT}/client/src/crypto/asn1utils.c
${PM3_ROOT}/client/src/loclass/ikeys.c ${PM3_ROOT}/client/src/crypto/libpcrypto.c
${PM3_ROOT}/client/src/loclass/elite_crack.c ${PM3_ROOT}/client/src/emv/test/cda_test.c
${PM3_ROOT}/client/src/emv/emvcore.c ${PM3_ROOT}/client/src/emv/test/crypto_test.c
${PM3_ROOT}/client/src/emv/test/cryptotest.c
${PM3_ROOT}/client/src/emv/test/dda_test.c
${PM3_ROOT}/client/src/emv/test/sda_test.c
${PM3_ROOT}/client/src/emv/apduinfo.c
${PM3_ROOT}/client/src/emv/cmdemv.c ${PM3_ROOT}/client/src/emv/cmdemv.c
${PM3_ROOT}/client/src/emv/tlv.c
${PM3_ROOT}/client/src/emv/dol.c
${PM3_ROOT}/client/src/emv/emv_tags.c
${PM3_ROOT}/client/src/emv/emv_roca.c
${PM3_ROOT}/client/src/emv/dump.c
${PM3_ROOT}/client/src/emv/crypto_polarssl.c
${PM3_ROOT}/client/src/emv/crypto.c ${PM3_ROOT}/client/src/emv/crypto.c
${PM3_ROOT}/client/src/emv/crypto_polarssl.c
${PM3_ROOT}/client/src/emv/dol.c
${PM3_ROOT}/client/src/emv/dump.c
${PM3_ROOT}/client/src/emv/emv_pk.c ${PM3_ROOT}/client/src/emv/emv_pk.c
${PM3_ROOT}/client/src/emv/emv_pki.c ${PM3_ROOT}/client/src/emv/emv_pki.c
${PM3_ROOT}/client/src/emv/emv_pki_priv.c
${PM3_ROOT}/client/src/emv/emv_roca.c
${PM3_ROOT}/client/src/emv/emv_tags.c
${PM3_ROOT}/client/src/emv/emvcore.c
${PM3_ROOT}/client/src/emv/emvjson.c ${PM3_ROOT}/client/src/emv/emvjson.c
${PM3_ROOT}/client/src/emv/apduinfo.c ${PM3_ROOT}/client/src/emv/tlv.c
${PM3_ROOT}/client/src/emv/test/cryptotest.c ${PM3_ROOT}/client/src/fido/additional_ca.c
${PM3_ROOT}/client/src/emv/test/sda_test.c ${PM3_ROOT}/client/src/fido/cbortools.c
${PM3_ROOT}/client/src/emv/test/dda_test.c ${PM3_ROOT}/client/src/fido/cose.c
${PM3_ROOT}/client/src/emv/test/cda_test.c ${PM3_ROOT}/client/src/fido/fidocore.c
${PM3_ROOT}/client/src/emv/test/crypto_test.c ${PM3_ROOT}/client/src/loclass/cipher.c
${PM3_ROOT}/client/src/emv/test/cryptotest.c ${PM3_ROOT}/client/src/loclass/cipherutils.c
${PM3_ROOT}/client/src/emv/test/sda_test.c ${PM3_ROOT}/client/src/loclass/elite_crack.c
${PM3_ROOT}/client/src/emv/test/dda_test.c ${PM3_ROOT}/client/src/loclass/hash1_brute.c
${PM3_ROOT}/client/src/emv/test/cda_test.c ${PM3_ROOT}/client/src/loclass/ikeys.c
${PM3_ROOT}/client/src/emv/test/crypto_test.c
${PM3_ROOT}/client/src/crypto/libpcrypto.c
${PM3_ROOT}/client/src/crypto/asn1utils.c
${PM3_ROOT}/client/src/crypto/asn1dump.c
${PM3_ROOT}/client/src/mifare/mad.c ${PM3_ROOT}/client/src/mifare/mad.c
${PM3_ROOT}/client/src/mifare/mfkey.c ${PM3_ROOT}/client/src/mifare/mfkey.c
${PM3_ROOT}/client/src/mifare/mifare4.c ${PM3_ROOT}/client/src/mifare/mifare4.c
${PM3_ROOT}/client/src/mifare/mifaredefault.c
${PM3_ROOT}/client/src/mifare/mifarehost.c ${PM3_ROOT}/client/src/mifare/mifarehost.c
${PM3_ROOT}/client/src/mifare/ndef.c ${PM3_ROOT}/client/src/mifare/ndef.c
${PM3_ROOT}/client/src/mifare/desfire_crypto.c ${PM3_ROOT}/client/src/mifare/desfire_crypto.c
${PM3_ROOT}/client/src/mifare/mifaredefault.c ${PM3_ROOT}/client/src/uart/uart_posix.c
${PM3_ROOT}/client/src/fido/cose.c ${PM3_ROOT}/client/src/uart/uart_win32.c
${PM3_ROOT}/client/src/fido/fidocore.c ${PM3_ROOT}/client/src/ui/overlays.ui
${PM3_ROOT}/client/src/fido/cbortools.c
${PM3_ROOT}/client/src/fido/additional_ca.c
${PM3_ROOT}/client/src/preferences.c
${PM3_ROOT}/client/src/graph.c
${PM3_ROOT}/client/src/ui.c
${PM3_ROOT}/client/src/tea.c
${PM3_ROOT}/client/src/util.c
${PM3_ROOT}/client/src/comms.c
${PM3_ROOT}/client/src/cmdcrc.c
${PM3_ROOT}/client/src/cmdanalyse.c
${PM3_ROOT}/client/src/cmddata.c
${PM3_ROOT}/client/src/cmdtrace.c
${PM3_ROOT}/client/src/cmdhf.c
${PM3_ROOT}/client/src/cmdhflto.c
${PM3_ROOT}/client/src/aidsearch.c ${PM3_ROOT}/client/src/aidsearch.c
${PM3_ROOT}/client/src/cmdanalyse.c
${PM3_ROOT}/client/src/cmdcrc.c
${PM3_ROOT}/client/src/cmddata.c
${PM3_ROOT}/client/src/cmdflashmem.c
${PM3_ROOT}/client/src/cmdflashmemspiffs.c
${PM3_ROOT}/client/src/cmdhf.c
${PM3_ROOT}/client/src/cmdhf14a.c ${PM3_ROOT}/client/src/cmdhf14a.c
${PM3_ROOT}/client/src/cmdhf14b.c ${PM3_ROOT}/client/src/cmdhf14b.c
${PM3_ROOT}/client/src/cmdwiegand.c
${PM3_ROOT}/client/src/wiegand_formatutils.c
${PM3_ROOT}/client/src/wiegand_formats.c
${PM3_ROOT}/client/src/cmdlfmotorola.c
${PM3_ROOT}/client/src/cmdlfgallagher.c
${PM3_ROOT}/client/src/cmdhf15.c ${PM3_ROOT}/client/src/cmdhf15.c
${PM3_ROOT}/client/src/cmdhfcryptorf.c
${PM3_ROOT}/client/src/cmdhfepa.c ${PM3_ROOT}/client/src/cmdhfepa.c
${PM3_ROOT}/client/src/cmdhflegic.c
${PM3_ROOT}/client/src/cmdhfthinfilm.c
${PM3_ROOT}/client/src/cmdflashmemspiffs.c
${PM3_ROOT}/client/src/cmdhffelica.c ${PM3_ROOT}/client/src/cmdhffelica.c
${PM3_ROOT}/client/src/cmdhffido.c
${PM3_ROOT}/client/src/cmdhficlass.c ${PM3_ROOT}/client/src/cmdhficlass.c
${PM3_ROOT}/client/src/cmdhflegic.c
${PM3_ROOT}/client/src/cmdhflist.c ${PM3_ROOT}/client/src/cmdhflist.c
${PM3_ROOT}/client/src/cmdhflto.c
${PM3_ROOT}/client/src/cmdhfmf.c ${PM3_ROOT}/client/src/cmdhfmf.c
${PM3_ROOT}/client/src/cmdhfmfdes.c ${PM3_ROOT}/client/src/cmdhfmfdes.c
${PM3_ROOT}/client/src/cmdhfmfu.c ${PM3_ROOT}/client/src/cmdhfmfhard.c
${PM3_ROOT}/client/src/cmdhfmfp.c ${PM3_ROOT}/client/src/cmdhfmfp.c
${PM3_ROOT}/client/src/cmdhffido.c ${PM3_ROOT}/client/src/cmdhfmfu.c
${PM3_ROOT}/client/src/cmdhfthinfilm.c
${PM3_ROOT}/client/src/cmdhftopaz.c ${PM3_ROOT}/client/src/cmdhftopaz.c
${PM3_ROOT}/client/src/cmdhw.c ${PM3_ROOT}/client/src/cmdhw.c
${PM3_ROOT}/client/src/cmdlf.c ${PM3_ROOT}/client/src/cmdlf.c
${PM3_ROOT}/client/src/cmdlfkeri.c
${PM3_ROOT}/client/src/cmdlffdx.c
${PM3_ROOT}/client/src/cmdlfio.c
${PM3_ROOT}/client/src/cmdlfem4x.c
${PM3_ROOT}/client/src/cmdlfhid.c
${PM3_ROOT}/client/src/cmdlfnedap.c
${PM3_ROOT}/client/src/cmdlfguard.c
${PM3_ROOT}/client/src/cmdlfhitag.c
${PM3_ROOT}/client/src/cmdlfjablotron.c
${PM3_ROOT}/client/src/cmdsmartcard.c
${PM3_ROOT}/client/src/cmdlfti.c
${PM3_ROOT}/client/src/cmdlfpac.c
${PM3_ROOT}/client/src/cmdlfnoralsy.c
${PM3_ROOT}/client/src/cmdlfnexwatch.c
${PM3_ROOT}/client/src/cmdlfpresco.c
${PM3_ROOT}/client/src/cmdlfindala.c
${PM3_ROOT}/client/src/cmdlfviking.c
${PM3_ROOT}/client/src/cmdlfsecurakey.c
${PM3_ROOT}/client/src/cmdlfpyramid.c
${PM3_ROOT}/client/src/cmdlfparadox.c
${PM3_ROOT}/client/src/cmdlfcotag.c
${PM3_ROOT}/client/src/cmdlfawid.c ${PM3_ROOT}/client/src/cmdlfawid.c
${PM3_ROOT}/client/src/cmdparser.c ${PM3_ROOT}/client/src/cmdlfcotag.c
${PM3_ROOT}/client/src/cmdscript.c ${PM3_ROOT}/client/src/cmdlfem4x.c
${PM3_ROOT}/client/src/cmdlfem4x50.c
${PM3_ROOT}/client/src/cmdlffdx.c
${PM3_ROOT}/client/src/cmdlfgallagher.c
${PM3_ROOT}/client/src/cmdlfguard.c
${PM3_ROOT}/client/src/cmdlfhid.c
${PM3_ROOT}/client/src/cmdlfhitag.c
${PM3_ROOT}/client/src/cmdlfindala.c
${PM3_ROOT}/client/src/cmdlfio.c
${PM3_ROOT}/client/src/cmdlfjablotron.c
${PM3_ROOT}/client/src/cmdlfkeri.c
${PM3_ROOT}/client/src/cmdlfmotorola.c
${PM3_ROOT}/client/src/cmdlfnedap.c
${PM3_ROOT}/client/src/cmdlfnexwatch.c
${PM3_ROOT}/client/src/cmdlfnoralsy.c
${PM3_ROOT}/client/src/cmdlfpac.c
${PM3_ROOT}/client/src/cmdlfparadox.c
${PM3_ROOT}/client/src/cmdlfpcf7931.c
${PM3_ROOT}/client/src/cmdlfpresco.c
${PM3_ROOT}/client/src/cmdlfpyramid.c
${PM3_ROOT}/client/src/cmdlfsecurakey.c
${PM3_ROOT}/client/src/cmdlft55xx.c
${PM3_ROOT}/client/src/cmdlfti.c
${PM3_ROOT}/client/src/cmdlfverichip.c
${PM3_ROOT}/client/src/cmdlfviking.c
${PM3_ROOT}/client/src/cmdlfvisa2000.c ${PM3_ROOT}/client/src/cmdlfvisa2000.c
${PM3_ROOT}/client/src/cmdmain.c ${PM3_ROOT}/client/src/cmdmain.c
${PM3_ROOT}/client/src/cmdflashmem.c ${PM3_ROOT}/client/src/cmdparser.c
${PM3_ROOT}/client/src/scripting.c ${PM3_ROOT}/client/src/cmdscript.c
${PM3_ROOT}/client/src/cmdsmartcard.c
${PM3_ROOT}/client/src/cmdtrace.c
${PM3_ROOT}/client/src/cmdusart.c
${PM3_ROOT}/client/src/cmdwiegand.c
${PM3_ROOT}/client/src/comms.c
${PM3_ROOT}/client/src/fileutils.c
${PM3_ROOT}/client/src/flash.c
${PM3_ROOT}/client/src/graph.c
${PM3_ROOT}/client/src/jansson_path.c
${PM3_ROOT}/client/src/preferences.c
${PM3_ROOT}/client/src/pm3_binlib.c ${PM3_ROOT}/client/src/pm3_binlib.c
${PM3_ROOT}/client/src/pm3_bitlib.c ${PM3_ROOT}/client/src/pm3_bitlib.c
${PM3_ROOT}/client/src/cmdlft55xx.c ${PM3_ROOT}/client/src/prng.c
${PM3_ROOT}/client/src/cmdlfpcf7931.c ${PM3_ROOT}/client/src/scandir.c
${PM3_ROOT}/client/src/cmdhfmfhard.c ${PM3_ROOT}/client/src/scripting.c
${PM3_ROOT}/client/src/cmdusart.c ${PM3_ROOT}/client/src/tea.c
${PM3_ROOT}/client/src/jansson_path.c ${PM3_ROOT}/client/src/ui.c
${PM3_ROOT}/client/src/util.c
${PM3_ROOT}/client/src/wiegand_formats.c
${PM3_ROOT}/client/src/wiegand_formatutils.c
# android resources # android resources
jni_tools.c jni_tools.c
pm3_main.c pm3_main.c
@ -154,6 +180,7 @@ add_library(pm3rrg_rdv4 SHARED
# includes # includes
target_include_directories(pm3rrg_rdv4 PRIVATE target_include_directories(pm3rrg_rdv4 PRIVATE
${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}
${BZIP2_INCLUDE_DIRS}
${PM3_ROOT}/include/ ${PM3_ROOT}/include/
${PM3_ROOT}/common ${PM3_ROOT}/common
${PM3_ROOT}/common_fpga ${PM3_ROOT}/common_fpga
@ -169,7 +196,7 @@ find_library(pm3rrg_rdv4_hardnested REQUIRED)
find_library(pm3rrg_rdv4_whereami REQUIRED) find_library(pm3rrg_rdv4_whereami REQUIRED)
target_link_libraries(pm3rrg_rdv4 target_link_libraries(pm3rrg_rdv4
bz2 ${BZIP2_LIBRARIES}
pm3rrg_rdv4_hardnested pm3rrg_rdv4_hardnested
pm3rrg_rdv4_mbedtls pm3rrg_rdv4_mbedtls
pm3rrg_rdv4_cliparser pm3rrg_rdv4_cliparser

View file

@ -28,26 +28,18 @@
#include "jni_tools.h" #include "jni_tools.h"
//iceman, todo: proxify socker server name. Maybe set in preferences? //iceman, todo: proxify socker server name. Maybe set in preferences?
// DXL reply, todo:
// Is a good idea, we can move this def to preferences, but not now.
// Because libpm3rrg_rdv4.so cant load preferences.
// I will impl a function to load preferences at future.
#define PM3_LOCAL_SOCKET_SERVER "DXL.COM.ASL" #define PM3_LOCAL_SOCKET_SERVER "DXL.COM.ASL"
void ShowGraphWindow(void) {
}
void HideGraphWindow(void) {
}
void RepaintGraphWindow(void) {
}
int push_cmdscriptfile(char *path, bool stayafter) {
return PM3_SUCCESS;
}
static char *g_android_executable_directory = NULL; static char *g_android_executable_directory = NULL;
static const char *g_android_user_directory = NULL; static char *g_android_user_directory = NULL;
const char *get_executable_directory(void) { char version_information[] = {"ANDROID_LIBRARY 1.4.6 build by DXL"};
const char *get_my_executable_directory(void) {
if (g_android_executable_directory == NULL) { if (g_android_executable_directory == NULL) {
char buf[FILE_PATH_SIZE] = {0}; char buf[FILE_PATH_SIZE] = {0};
getcwd(buf, sizeof(buf)); getcwd(buf, sizeof(buf));
@ -57,14 +49,20 @@ const char *get_executable_directory(void) {
return g_android_executable_directory; return g_android_executable_directory;
} }
const char *get_user_directory(void) { const char *get_my_user_directory(void) {
return g_android_user_directory; return g_android_user_directory;
} }
void ShowGraphWindow(void) {}
void HideGraphWindow(void) {}
void RepaintGraphWindow(void) {}
int push_cmdscriptfile(char *path, bool stayafter) { return PM3_SUCCESS; }
static bool OpenPm3(void) { static bool OpenPm3(void) {
if (conn.run) { if (conn.run) { return true; }
return true;
}
// Open with LocalSocket. Not a tcp connection! // Open with LocalSocket. Not a tcp connection!
bool ret = OpenProxmark("socket:"PM3_LOCAL_SOCKET_SERVER, false, 1000, false, 115200); bool ret = OpenProxmark("socket:"PM3_LOCAL_SOCKET_SERVER, false, 1000, false, 115200);
return ret; return ret;
@ -88,7 +86,7 @@ jint Console(JNIEnv *env, jobject instance, jstring cmd_) {
PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "");
char *cmd = (char *)((*env)->GetStringUTFChars(env, cmd_, 0)); char *cmd = (char *) ((*env)->GetStringUTFChars(env, cmd_, 0));
int ret = CommandReceived(cmd); int ret = CommandReceived(cmd);
if (ret == 99) { if (ret == 99) {
// exit / quit // exit / quit
@ -104,11 +102,11 @@ jint Console(JNIEnv *env, jobject instance, jstring cmd_) {
* Is client running! * Is client running!
* */ * */
jboolean IsClientRunning(JNIEnv *env, jobject instance) { jboolean IsClientRunning(JNIEnv *env, jobject instance) {
return (jboolean)((jboolean) conn.run); return (jboolean) ((jboolean) conn.run);
} }
/* /*
* test hw and hw and client. * test hw and fw and client.
* */ * */
jboolean TestPm3(JNIEnv *env, jobject instance) { jboolean TestPm3(JNIEnv *env, jobject instance) {
if (open() == false) { if (open() == false) {
@ -116,7 +114,7 @@ jboolean TestPm3(JNIEnv *env, jobject instance) {
return false; return false;
} }
bool ret = (TestProxmark() == PM3_SUCCESS); bool ret = (TestProxmark() == PM3_SUCCESS);
return (jboolean)(ret); return (jboolean) (ret);
} }
/* /*
@ -143,21 +141,23 @@ JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *reserved) {
} }
jclass clz_test = (*jniEnv)->FindClass(jniEnv, "cn/rrg/devices/Proxmark3RRGRdv4"); jclass clz_test = (*jniEnv)->FindClass(jniEnv, "cn/rrg/devices/Proxmark3RRGRdv4");
JNINativeMethod methods[] = { JNINativeMethod methods[] = {
{"startExecute", "(Ljava/lang/String;)I", (void *) Console}, {"startExecute", "(Ljava/lang/String;)I", (void *) Console},
{"stopExecute", "()V", (void *) ClosePm3}, {"stopExecute", "()V", (void *) ClosePm3},
{"isExecuting", "()Z", (void *) IsClientRunning} {"isExecuting", "()Z", (void *) IsClientRunning}
}; };
JNINativeMethod methods1[] = { JNINativeMethod methods1[] = {
{"testPm3", "()Z", (void *) TestPm3}, {"testPm3", "()Z", (void *) TestPm3},
{"closePm3", "()V", ClosePm3} {"closePm3", "()V", ClosePm3}
}; };
if ((*jniEnv)->RegisterNatives(jniEnv, clazz, methods, sizeof(methods) / sizeof(methods[0])) != JNI_OK) { if ((*jniEnv)->RegisterNatives(jniEnv, clazz, methods, sizeof(methods) / sizeof(methods[0])) !=
JNI_OK) {
return -1; return -1;
} }
if ((*jniEnv)->RegisterNatives(jniEnv, clz_test, methods1, sizeof(methods1) / sizeof(methods1[0])) != JNI_OK) { if ((*jniEnv)->RegisterNatives(jniEnv, clz_test, methods1,
sizeof(methods1) / sizeof(methods1[0])) != JNI_OK) {
return -1; return -1;
} }