Some cleanup in test app
This CL is to keep track of work and demonstrate a way to do ndk build in case it's needed. But ndk-build doesn't work yet because of many reasons, issues will be addressed in future if it's needed. Some minor changes in source files to make them pass compiler. Review URL: http://webrtc-codereview.appspot.com/107004 git-svn-id: http://webrtc.googlecode.com/svn/trunk@405 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
parent
54e4691e20
commit
412889a2a9
@ -7,5 +7,5 @@
|
|||||||
# "build.properties", and override values to adapt the script to your
|
# "build.properties", and override values to adapt the script to your
|
||||||
# project structure.
|
# project structure.
|
||||||
|
|
||||||
# Project target.
|
# Project target, OpenSL ES requires API level 9
|
||||||
target=android-3
|
target=android-9
|
||||||
|
@ -6,24 +6,110 @@
|
|||||||
# in the file PATENTS. All contributing project authors may
|
# in the file PATENTS. All contributing project authors may
|
||||||
# be found in the AUTHORS file in the root of the source tree.
|
# be found in the AUTHORS file in the root of the source tree.
|
||||||
|
|
||||||
# Android makefile for webrtc VoiceEngine Java API wrapper
|
MY_WEBRTC_ROOT_PATH := $(call my-dir)
|
||||||
# This setup assumes two libs built outside Android makefile structure.
|
|
||||||
|
MY_WEBRTC_SRC_PATH := ../../../../../../..
|
||||||
|
|
||||||
|
include $(MY_WEBRTC_ROOT_PATH)/$(MY_WEBRTC_SRC_PATH)/src/common_audio/resampler/main/source/Android.mk
|
||||||
|
include $(MY_WEBRTC_ROOT_PATH)/$(MY_WEBRTC_SRC_PATH)/src/common_audio/signal_processing_library/main/source/Android.mk
|
||||||
|
include $(MY_WEBRTC_ROOT_PATH)/$(MY_WEBRTC_SRC_PATH)/src/common_audio/vad/main/source/Android.mk
|
||||||
|
include $(MY_WEBRTC_ROOT_PATH)/$(MY_WEBRTC_SRC_PATH)/src/modules/audio_coding/NetEQ/main/source/Android.mk
|
||||||
|
include $(MY_WEBRTC_ROOT_PATH)/$(MY_WEBRTC_SRC_PATH)/src/modules/audio_coding/codecs/CNG/main/source/Android.mk
|
||||||
|
include $(MY_WEBRTC_ROOT_PATH)/$(MY_WEBRTC_SRC_PATH)/src/modules/audio_coding/codecs/G711/main/source/Android.mk
|
||||||
|
include $(MY_WEBRTC_ROOT_PATH)/$(MY_WEBRTC_SRC_PATH)/src/modules/audio_coding/codecs/G722/main/source/Android.mk
|
||||||
|
include $(MY_WEBRTC_ROOT_PATH)/$(MY_WEBRTC_SRC_PATH)/src/modules/audio_coding/codecs/PCM16B/main/source/Android.mk
|
||||||
|
include $(MY_WEBRTC_ROOT_PATH)/$(MY_WEBRTC_SRC_PATH)/src/modules/audio_coding/codecs/iLBC/main/source/Android.mk
|
||||||
|
include $(MY_WEBRTC_ROOT_PATH)/$(MY_WEBRTC_SRC_PATH)/src/modules/audio_coding/codecs/iSAC/fix/source/Android.mk
|
||||||
|
include $(MY_WEBRTC_ROOT_PATH)/$(MY_WEBRTC_SRC_PATH)/src/modules/audio_coding/codecs/iSAC/main/source/Android.mk
|
||||||
|
include $(MY_WEBRTC_ROOT_PATH)/$(MY_WEBRTC_SRC_PATH)/src/modules/audio_coding/main/source/Android.mk
|
||||||
|
include $(MY_WEBRTC_ROOT_PATH)/$(MY_WEBRTC_SRC_PATH)/src/modules/audio_conference_mixer/source/Android.mk
|
||||||
|
include $(MY_WEBRTC_ROOT_PATH)/$(MY_WEBRTC_SRC_PATH)/src/modules/audio_device/main/source/Android.mk
|
||||||
|
include $(MY_WEBRTC_ROOT_PATH)/$(MY_WEBRTC_SRC_PATH)/src/modules/audio_processing/aec/main/source/Android.mk
|
||||||
|
include $(MY_WEBRTC_ROOT_PATH)/$(MY_WEBRTC_SRC_PATH)/src/modules/audio_processing/aecm/main/source/Android.mk
|
||||||
|
include $(MY_WEBRTC_ROOT_PATH)/$(MY_WEBRTC_SRC_PATH)/src/modules/audio_processing/agc/main/source/Android.mk
|
||||||
|
include $(MY_WEBRTC_ROOT_PATH)/$(MY_WEBRTC_SRC_PATH)/src/modules/audio_processing/main/Android.mk
|
||||||
|
include $(MY_WEBRTC_ROOT_PATH)/$(MY_WEBRTC_SRC_PATH)/src/modules/audio_processing/ns/main/source/Android.mk
|
||||||
|
include $(MY_WEBRTC_ROOT_PATH)/$(MY_WEBRTC_SRC_PATH)/src/modules/audio_processing/utility/Android.mk
|
||||||
|
include $(MY_WEBRTC_ROOT_PATH)/$(MY_WEBRTC_SRC_PATH)/src/modules/media_file/source/Android.mk
|
||||||
|
include $(MY_WEBRTC_ROOT_PATH)/$(MY_WEBRTC_SRC_PATH)/src/modules/rtp_rtcp/source/Android.mk
|
||||||
|
include $(MY_WEBRTC_ROOT_PATH)/$(MY_WEBRTC_SRC_PATH)/src/modules/udp_transport/source/Android.mk
|
||||||
|
include $(MY_WEBRTC_ROOT_PATH)/$(MY_WEBRTC_SRC_PATH)/src/modules/utility/source/Android.mk
|
||||||
|
include $(MY_WEBRTC_ROOT_PATH)/$(MY_WEBRTC_SRC_PATH)/src/system_wrappers/source/Android.mk
|
||||||
|
include $(MY_WEBRTC_ROOT_PATH)/$(MY_WEBRTC_SRC_PATH)/src/voice_engine/main/source/Android.mk
|
||||||
|
|
||||||
LOCAL_PATH := $(call my-dir)
|
LOCAL_PATH := $(call my-dir)
|
||||||
|
|
||||||
WEBRTC_INTERFACES_PATH := $(LOCAL_PATH)/../../../../../../../../build/interface
|
include $(CLEAR_VARS)
|
||||||
WEBRTC_LIBS_PATH := $(LOCAL_PATH)/../../../../../../../../build/libraries
|
|
||||||
WEBRTC_AUTO_TEST_PATH := $(LOCAL_PATH)/../../../auto_test
|
LOCAL_ARM_MODE := arm
|
||||||
|
LOCAL_MODULE := libwebrtc_audio_preprocessing
|
||||||
|
LOCAL_MODULE_TAGS := optional
|
||||||
|
|
||||||
|
LOCAL_WHOLE_STATIC_LIBRARIES := \
|
||||||
|
libwebrtc_spl \
|
||||||
|
libwebrtc_resampler \
|
||||||
|
libwebrtc_apm \
|
||||||
|
libwebrtc_apm_utility \
|
||||||
|
libwebrtc_vad \
|
||||||
|
libwebrtc_ns \
|
||||||
|
libwebrtc_agc \
|
||||||
|
libwebrtc_aec \
|
||||||
|
libwebrtc_aecm \
|
||||||
|
libwebrtc_system_wrappers \
|
||||||
|
|
||||||
|
LOCAL_SHARED_LIBRARIES := \
|
||||||
|
libcutils \
|
||||||
|
libdl \
|
||||||
|
libstlport
|
||||||
|
|
||||||
|
LOCAL_PRELINK_MODULE := false
|
||||||
|
|
||||||
|
ifndef NDK_ROOT
|
||||||
|
include external/stlport/libstlport.mk
|
||||||
|
endif
|
||||||
|
include $(BUILD_SHARED_LIBRARY)
|
||||||
|
|
||||||
|
###
|
||||||
|
|
||||||
|
LOCAL_PATH := $(call my-dir)
|
||||||
|
|
||||||
include $(CLEAR_VARS)
|
include $(CLEAR_VARS)
|
||||||
|
|
||||||
LOCAL_MODULE := android_test
|
LOCAL_ARM_MODE := arm
|
||||||
LOCAL_SRC_FILES := android_test.cc
|
LOCAL_MODULE := libwebrtc
|
||||||
LOCAL_CFLAGS := -DWEBRTC_TARGET_PC # For typedefs.h
|
LOCAL_MODULE_TAGS := optional
|
||||||
LOCAL_C_INCLUDES := $(WEBRTC_INTERFACES_PATH) $(WEBRTC_AUTO_TEST_PATH)
|
|
||||||
LOCAL_LDLIBS := \
|
|
||||||
$(WEBRTC_LIBS_PATH)/VoiceEngine_android_gcc.a \
|
|
||||||
$(WEBRTC_AUTO_TEST_PATH)/auto_test_android_gcc.a \
|
|
||||||
-llog -lgcc
|
|
||||||
|
|
||||||
|
LOCAL_WHOLE_STATIC_LIBRARIES := \
|
||||||
|
libwebrtc_system_wrappers \
|
||||||
|
libwebrtc_audio_device \
|
||||||
|
libwebrtc_pcm16b \
|
||||||
|
libwebrtc_cng \
|
||||||
|
libwebrtc_audio_coding \
|
||||||
|
libwebrtc_rtp_rtcp \
|
||||||
|
libwebrtc_media_file \
|
||||||
|
libwebrtc_udp_transport \
|
||||||
|
libwebrtc_utility \
|
||||||
|
libwebrtc_neteq \
|
||||||
|
libwebrtc_audio_conference_mixer \
|
||||||
|
libwebrtc_isac \
|
||||||
|
libwebrtc_ilbc \
|
||||||
|
libwebrtc_isacfix \
|
||||||
|
libwebrtc_g722 \
|
||||||
|
libwebrtc_g711 \
|
||||||
|
libwebrtc_voe_core
|
||||||
|
|
||||||
|
LOCAL_SHARED_LIBRARIES := \
|
||||||
|
libcutils \
|
||||||
|
libdl \
|
||||||
|
libstlport \
|
||||||
|
libjpeg \
|
||||||
|
libGLESv2 \
|
||||||
|
libOpenSLES \
|
||||||
|
libwebrtc_audio_preprocessing
|
||||||
|
|
||||||
|
LOCAL_PRELINK_MODULE := false
|
||||||
|
|
||||||
|
ifndef NDK_ROOT
|
||||||
|
include external/stlport/libstlport.mk
|
||||||
|
endif
|
||||||
include $(BUILD_SHARED_LIBRARY)
|
include $(BUILD_SHARED_LIBRARY)
|
||||||
|
@ -0,0 +1,3 @@
|
|||||||
|
# Build both ARMv5TE and ARMv7-A machine code.
|
||||||
|
APP_ABI := armeabi armeabi-v7a x86
|
||||||
|
APP_STL := stlport_static
|
@ -106,8 +106,47 @@
|
|||||||
// General design: create a class or keep global struct with "C" functions?
|
// General design: create a class or keep global struct with "C" functions?
|
||||||
// Otherwise make sure symbols are as unique as possible.
|
// Otherwise make sure symbols are as unique as possible.
|
||||||
|
|
||||||
|
// TestType enumerator
|
||||||
|
enum TestType
|
||||||
|
{
|
||||||
|
Invalid = -1,
|
||||||
|
Standard = 0,
|
||||||
|
Extended = 1,
|
||||||
|
Stress = 2,
|
||||||
|
Unit = 3,
|
||||||
|
CPU = 4
|
||||||
|
};
|
||||||
|
|
||||||
|
// ExtendedSelection enumerator
|
||||||
|
enum ExtendedSelection
|
||||||
|
{
|
||||||
|
XSEL_Invalid = -1,
|
||||||
|
XSEL_None = 0,
|
||||||
|
XSEL_All,
|
||||||
|
XSEL_Base,
|
||||||
|
XSEL_CallReport,
|
||||||
|
XSEL_Codec,
|
||||||
|
XSEL_DTMF,
|
||||||
|
XSEL_Encryption,
|
||||||
|
XSEL_ExternalMedia,
|
||||||
|
XSEL_File,
|
||||||
|
XSEL_Hardware,
|
||||||
|
XSEL_NetEqStats,
|
||||||
|
XSEL_Network,
|
||||||
|
XSEL_PTT,
|
||||||
|
XSEL_RTP_RTCP,
|
||||||
|
XSEL_VideoSync,
|
||||||
|
XSEL_VideoSyncExtended,
|
||||||
|
XSEL_VolumeControl,
|
||||||
|
XSEL_VQE,
|
||||||
|
XSEL_APM,
|
||||||
|
XSEL_VQMon
|
||||||
|
};
|
||||||
|
|
||||||
using namespace webrtc;
|
using namespace webrtc;
|
||||||
|
|
||||||
|
class my_transportation;
|
||||||
|
|
||||||
// VoiceEngine data struct
|
// VoiceEngine data struct
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
@ -128,6 +167,32 @@ typedef struct
|
|||||||
JavaVM* jvm;
|
JavaVM* jvm;
|
||||||
} VoiceEngineData;
|
} VoiceEngineData;
|
||||||
|
|
||||||
|
// my_transportation is used when useExtTrans is enabled
|
||||||
|
class my_transportation : public Transport
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
my_transportation(VoENetwork * network) :
|
||||||
|
netw(network) {
|
||||||
|
}
|
||||||
|
|
||||||
|
int SendPacket(int channel,const void *data,int len);
|
||||||
|
int SendRTCPPacket(int channel, const void *data, int len);
|
||||||
|
private:
|
||||||
|
VoENetwork * netw;
|
||||||
|
};
|
||||||
|
|
||||||
|
int my_transportation::SendPacket(int channel,const void *data,int len)
|
||||||
|
{
|
||||||
|
netw->ReceivedRTPPacket(channel, data, len);
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
|
int my_transportation::SendRTCPPacket(int channel, const void *data, int len)
|
||||||
|
{
|
||||||
|
netw->ReceivedRTCPPacket(channel, data, len);
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
//Global variables visible in this file
|
//Global variables visible in this file
|
||||||
static VoiceEngineData veData1;
|
static VoiceEngineData veData1;
|
||||||
static VoiceEngineData veData2;
|
static VoiceEngineData veData2;
|
||||||
@ -136,9 +201,6 @@ static VoiceEngineData veData2;
|
|||||||
static bool GetSubApis(VoiceEngineData &veData);
|
static bool GetSubApis(VoiceEngineData &veData);
|
||||||
static bool ReleaseSubApis(VoiceEngineData &veData);
|
static bool ReleaseSubApis(VoiceEngineData &veData);
|
||||||
|
|
||||||
char nikkey[64] =
|
|
||||||
"123456781234567812345678123456781234567812345678123456781234567";
|
|
||||||
|
|
||||||
class ThreadTest
|
class ThreadTest
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -189,14 +251,14 @@ bool ThreadTest::Process()
|
|||||||
|
|
||||||
#ifdef INIT_FROM_THREAD
|
#ifdef INIT_FROM_THREAD
|
||||||
VALIDATE_BASE_POINTER;
|
VALIDATE_BASE_POINTER;
|
||||||
veData1.base->Init(0, 0, 0);
|
veData1.base->Init();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef START_CALL_FROM_THREAD
|
#ifdef START_CALL_FROM_THREAD
|
||||||
// receiving instance
|
// receiving instance
|
||||||
veData2.ve = VoiceEngine::Create();
|
veData2.ve = VoiceEngine::Create();
|
||||||
GetSubApis(veData2);
|
GetSubApis(veData2);
|
||||||
veData2.base->Init(0, 0, 0);
|
veData2.base->Init();
|
||||||
veData2.base->CreateChannel();
|
veData2.base->CreateChannel();
|
||||||
if(veData2.base->SetLocalReceiver(0, 1234) < 0)
|
if(veData2.base->SetLocalReceiver(0, 1234) < 0)
|
||||||
{
|
{
|
||||||
@ -218,7 +280,7 @@ bool ThreadTest::Process()
|
|||||||
// sending instance
|
// sending instance
|
||||||
veData1.ve = VoiceEngine::Create();
|
veData1.ve = VoiceEngine::Create();
|
||||||
GetSubApis(veData1);
|
GetSubApis(veData1);
|
||||||
veData1.base->Init(0, 0, 0);
|
veData1.base->Init();
|
||||||
if(veData1.base->CreateChannel() < 0)
|
if(veData1.base->CreateChannel() < 0)
|
||||||
{
|
{
|
||||||
__android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG,
|
__android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG,
|
||||||
@ -458,13 +520,13 @@ JNIEXPORT jint JNICALL Java_org_webrtc_voiceengine_test_AndroidTest_RunAutoTest(
|
|||||||
VoiceEngine::SetAndroidObjects(veData1.jvm, env, context);
|
VoiceEngine::SetAndroidObjects(veData1.jvm, env, context);
|
||||||
|
|
||||||
// Call voe test interface function
|
// Call voe test interface function
|
||||||
//setAndroidObjects(veData1.jvm, context);
|
// TODO(leozwang) add autotest setAndroidObjects(veData1.jvm, context);
|
||||||
jint retVal = runAutoTest(tType, xsel);
|
// jint retVal = runAutoTest(tType, xsel);
|
||||||
|
|
||||||
// Clear instance independent Java objects
|
// Clear instance independent Java objects
|
||||||
VoiceEngine::SetAndroidObjects(NULL, NULL, NULL);
|
VoiceEngine::SetAndroidObjects(NULL, NULL, NULL);
|
||||||
|
|
||||||
return retVal;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////
|
||||||
@ -556,38 +618,12 @@ JNIEXPORT jboolean JNICALL Java_org_webrtc_voiceengine_test_AndroidTest_Delete(
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/////////////////////////////////////////////
|
|
||||||
// [Base] Authenticate
|
|
||||||
//
|
|
||||||
JNIEXPORT jint JNICALL Java_org_webrtc_voiceengine_test_AndroidTest_Authenticate(
|
|
||||||
JNIEnv *env,
|
|
||||||
jobject,
|
|
||||||
jstring key)
|
|
||||||
{
|
|
||||||
const char* keyNative = env->GetStringUTFChars(key, NULL);
|
|
||||||
if (!keyNative)
|
|
||||||
{
|
|
||||||
__android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG,
|
|
||||||
"Could not get UTF string");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
jint retVal = veData1.base->Authenticate(keyNative, strlen(keyNative));
|
|
||||||
|
|
||||||
env->ReleaseStringUTFChars(key, keyNative);
|
|
||||||
|
|
||||||
return retVal;
|
|
||||||
}
|
|
||||||
|
|
||||||
/////////////////////////////////////////////
|
/////////////////////////////////////////////
|
||||||
// [Base] Initialize VoiceEngine
|
// [Base] Initialize VoiceEngine
|
||||||
//
|
//
|
||||||
JNIEXPORT jint JNICALL Java_org_webrtc_voiceengine_test_AndroidTest_Init(
|
JNIEXPORT jint JNICALL Java_org_webrtc_voiceengine_test_AndroidTest_Init(
|
||||||
JNIEnv *,
|
JNIEnv *,
|
||||||
jobject,
|
jobject,
|
||||||
jint month,
|
|
||||||
jint day,
|
|
||||||
jint year,
|
|
||||||
jboolean enableTrace,
|
jboolean enableTrace,
|
||||||
jboolean useExtTrans)
|
jboolean useExtTrans)
|
||||||
{
|
{
|
||||||
@ -600,13 +636,6 @@ JNIEXPORT jint JNICALL Java_org_webrtc_voiceengine_test_AndroidTest_Init(
|
|||||||
__android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG,
|
__android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG,
|
||||||
"Could not enable trace");
|
"Could not enable trace");
|
||||||
}
|
}
|
||||||
if (0
|
|
||||||
!= VoiceEngine::SetEncryptedTraceFile(
|
|
||||||
"/sdcard/trace_debug.txt"))
|
|
||||||
{
|
|
||||||
__android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG,
|
|
||||||
"Could not enable debug trace");
|
|
||||||
}
|
|
||||||
if (0 != VoiceEngine::SetTraceFilter(kTraceAll))
|
if (0 != VoiceEngine::SetTraceFilter(kTraceAll))
|
||||||
{
|
{
|
||||||
__android_log_write(ANDROID_LOG_WARN, WEBRTC_LOG_TAG,
|
__android_log_write(ANDROID_LOG_WARN, WEBRTC_LOG_TAG,
|
||||||
@ -625,7 +654,7 @@ JNIEXPORT jint JNICALL Java_org_webrtc_voiceengine_test_AndroidTest_Init(
|
|||||||
threadTest.RunTest();
|
threadTest.RunTest();
|
||||||
usleep(200000);
|
usleep(200000);
|
||||||
#else
|
#else
|
||||||
retVal = veData1.base->Init(month, day, year);
|
retVal = veData1.base->Init();
|
||||||
#endif
|
#endif
|
||||||
return retVal;
|
return retVal;
|
||||||
}
|
}
|
||||||
|
@ -39,21 +39,13 @@ JNIEXPORT jboolean JNICALL Java_org_webrtc_voiceengine_test_AndroidTest_Create
|
|||||||
JNIEXPORT jboolean JNICALL Java_org_webrtc_voiceengine_test_AndroidTest_Delete
|
JNIEXPORT jboolean JNICALL Java_org_webrtc_voiceengine_test_AndroidTest_Delete
|
||||||
(JNIEnv *, jobject);
|
(JNIEnv *, jobject);
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: org_webrtc_voiceengine_test_AndroidTest
|
|
||||||
* Method: Authenticate
|
|
||||||
* Signature: (Ljava/lang/String;)I
|
|
||||||
*/
|
|
||||||
JNIEXPORT jint JNICALL Java_org_webrtc_voiceengine_test_AndroidTest_Authenticate
|
|
||||||
(JNIEnv *, jobject, jstring);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Class: org_webrtc_voiceengine_test_AndroidTest
|
* Class: org_webrtc_voiceengine_test_AndroidTest
|
||||||
* Method: Init
|
* Method: Init
|
||||||
* Signature: (IIIZZ)I
|
* Signature: (IIIZZ)I
|
||||||
*/
|
*/
|
||||||
JNIEXPORT jint JNICALL Java_org_webrtc_voiceengine_test_AndroidTest_Init
|
JNIEXPORT jint JNICALL Java_org_webrtc_voiceengine_test_AndroidTest_Init
|
||||||
(JNIEnv *, jobject, jint, jint, jint, jboolean, jboolean);
|
(JNIEnv *, jobject, jboolean, jboolean);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Class: org_webrtc_voiceengine_test_AndroidTest
|
* Class: org_webrtc_voiceengine_test_AndroidTest
|
||||||
|
@ -1128,10 +1128,7 @@ public class AndroidTest extends Activity {
|
|||||||
|
|
||||||
private native boolean Delete();
|
private native boolean Delete();
|
||||||
|
|
||||||
private native int Authenticate(String key);
|
private native int Init(boolean enableTrace, boolean useExtTrans);
|
||||||
|
|
||||||
private native int Init(int month, int day, int year,
|
|
||||||
boolean enableTrace, boolean useExtTrans);
|
|
||||||
|
|
||||||
private native int Terminate();
|
private native int Terminate();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user