果酱乱舞
使用 Marmalade 和 EDK Flurry 编写了简单的代码。
应用程序仅启动会话,发送一个日志事件并停止。
在 Motorola Flipout 上,该应用程序运行良好,不会崩溃。
但在三星 Galaxy Tab 上却崩溃了。 这是来自 logcat 的日志:
11-21 15:00:31.608: W/dalvikvm(13139): JNI 警告: 0x485c7c40 不是有效的 JNI 引用 11-21 15:00:31.608: W/dalvikvm(13139): 在 Lcom/ideaworks3d/marmalade/LoaderThread;.runNative (Ljava/lang/String;Ljava/lang/String;)V (GetMethodID)
11-21 15:00:31.608:I/dalvikvm(13139):“线程 9”prio=5 tid=8 可运行 11-21 15:00:31.612:我/dalvikvm(13139):| group="main" sCount=0 dsCount=0 s=N obj=0x485d9a20 self=0x249730
11-21 15:00:31.616: I/dalvikvm(13139): | sysTid=13146 Nice=0 sched=0/0 cgrp=默认句柄=2397632
11-21 15:00:31.619:I/dalvikvm(13139):位于 com.ideaworks3d.marmalade.LoaderThread.runNative(本机方法)
11-21 15:00:31.619: I/dalvikvm(13139): 在 com.ideaworks3d.marmalade.LoaderThread.run(LoaderThread.java:712)
11-21 15:00:31.627:E/dalvikvm(13139):虚拟机中止
更新: 代码:-
#include "flurry.h"
#include "IwGx.h"
int main()
{
IwGxInit();
IwGxSetColClear(0,0,0xff,0xff);
char* i = new char[2];
i[0] = 9 + 48;
i[0] = Flurry::InitFlurry() + 48;
i[1] = '\0';
//Flurry::SetUniqueUserID();
while(!s3eDeviceCheckPauseRequest())
{
IwGxClear();
IwGxPrintString(30, 100, "Flurry D");
IwGxPrintString(30, 110, "Init code");
IwGxPrintString(30, 120 , i);
IwGxFlush();
IwGxSwapBuffers();
s3eDeviceYield(0);
}
Flurry::ExitFlurry();
IwGxTerminate();
return 0;
}
#include "flurry.h"
#ifdef FLURRY
char* Flurry:: FLURRY_ID_ANDROID;
char* Flurry:: FLURRY_ID_IPHONE;
char Flurry:: log_error = 9;
void Flurry :: InitIDsForPlatforms()
{
FLURRY_ID_ANDROID = new char[20];
FLURRY_ID_IPHONE = new char[20];
strcpy(FLURRY_ID_ANDROID, "some number");
strcpy(FLURRY_ID_IPHONE, "some number");
};
int Flurry :: InitFlurry()
{
//if(log_error != 9)
//return log_error;
//Check if Flurry is available
if (!s3eFlurryAvailable())
{
Flurry::log_error = 1;
return 1;
}
Flurry::InitIDsForPlatforms();
//Enable AppCircle
//s3eFlurryAppCircleEnable();
return Flurry::log_error;
//Check the OS is runing on device
switch(s3eDeviceGetInt(S3E_DEVICE_OS))
{
case S3E_OS_ID_ANDROID :
s3eFlurryStart(Flurry::FLURRY_ID_ANDROID);
break;
case S3E_OS_ID_IPHONE :
s3eFlurryStart(Flurry::FLURRY_ID_IPHONE);
break;
default :
Flurry::log_error = 2;
return 2;
}
/*
something more write?
*/
Flurry::log_error = 0;
return 0;
};
void Flurry :: SetUserID(const char* ID)
{
if(!Flurry::log_error)
s3eFlurrySetUserID(ID);
}
void Flurry :: ExitFlurry()
{
if(!Flurry::log_error)
s3eFlurrySetSessionReportOnClose(true);
}
void Flurry :: LogEvent(const char* data)
{
if(!Flurry::log_error)
s3eFlurryLogEvent(data, false);
}
void Flurry :: addParamterToLogEvent(const char* name, const char* data)
{
if(!Flurry::log_error)
addToHashMap(name, data);
}
void Flurry :: addParamterToLogEvent(const char* name, int data)
{
if(Flurry::log_error)
return;
std::stringstream str;
str << data;
addToHashMap(name, str.str().c_str());
}
void Flurry :: LogEventWithParameters(const char* name)
{
if(!Flurry::log_error)
s3eFlurryLogEventMap(name);
}
void Flurry :: SetUniqueUserID()
{
if(!Flurry::log_error)
Flurry :: SetUserID(s3eDeviceGetString(S3E_DEVICE_UNIQUE_ID));
}
#endif
Wrote simple code using Marmalade with EDK Flurry.
app only start's session, send one log event and stops.
On Motorola Flipout this app work fine witout crash.
But on Samsung Galaxy Tab its crashing.
It's log from logcat:
11-21 15:00:31.608: W/dalvikvm(13139): JNI WARNING: 0x485c7c40 is not a valid JNI reference
11-21 15:00:31.608: W/dalvikvm(13139): in Lcom/ideaworks3d/marmalade/LoaderThread;.runNative (Ljava/lang/String;Ljava/lang/String;)V (GetMethodID)11-21 15:00:31.608: I/dalvikvm(13139): "Thread-9" prio=5 tid=8 RUNNABLE
11-21 15:00:31.612: I/dalvikvm(13139): | group="main" sCount=0 dsCount=0 s=N obj=0x485d9a20 self=0x24973011-21 15:00:31.616: I/dalvikvm(13139): | sysTid=13146 nice=0 sched=0/0 cgrp=default handle=2397632
11-21 15:00:31.619: I/dalvikvm(13139): at com.ideaworks3d.marmalade.LoaderThread.runNative(Native Method)
11-21 15:00:31.619: I/dalvikvm(13139): at com.ideaworks3d.marmalade.LoaderThread.run(LoaderThread.java:712)
11-21 15:00:31.627: E/dalvikvm(13139): VM aborting
Update: Code:-
#include "flurry.h"
#include "IwGx.h"
int main()
{
IwGxInit();
IwGxSetColClear(0,0,0xff,0xff);
char* i = new char[2];
i[0] = 9 + 48;
i[0] = Flurry::InitFlurry() + 48;
i[1] = '\0';
//Flurry::SetUniqueUserID();
while(!s3eDeviceCheckPauseRequest())
{
IwGxClear();
IwGxPrintString(30, 100, "Flurry D");
IwGxPrintString(30, 110, "Init code");
IwGxPrintString(30, 120 , i);
IwGxFlush();
IwGxSwapBuffers();
s3eDeviceYield(0);
}
Flurry::ExitFlurry();
IwGxTerminate();
return 0;
}
#include "flurry.h"
#ifdef FLURRY
char* Flurry:: FLURRY_ID_ANDROID;
char* Flurry:: FLURRY_ID_IPHONE;
char Flurry:: log_error = 9;
void Flurry :: InitIDsForPlatforms()
{
FLURRY_ID_ANDROID = new char[20];
FLURRY_ID_IPHONE = new char[20];
strcpy(FLURRY_ID_ANDROID, "some number");
strcpy(FLURRY_ID_IPHONE, "some number");
};
int Flurry :: InitFlurry()
{
//if(log_error != 9)
//return log_error;
//Check if Flurry is available
if (!s3eFlurryAvailable())
{
Flurry::log_error = 1;
return 1;
}
Flurry::InitIDsForPlatforms();
//Enable AppCircle
//s3eFlurryAppCircleEnable();
return Flurry::log_error;
//Check the OS is runing on device
switch(s3eDeviceGetInt(S3E_DEVICE_OS))
{
case S3E_OS_ID_ANDROID :
s3eFlurryStart(Flurry::FLURRY_ID_ANDROID);
break;
case S3E_OS_ID_IPHONE :
s3eFlurryStart(Flurry::FLURRY_ID_IPHONE);
break;
default :
Flurry::log_error = 2;
return 2;
}
/*
something more write?
*/
Flurry::log_error = 0;
return 0;
};
void Flurry :: SetUserID(const char* ID)
{
if(!Flurry::log_error)
s3eFlurrySetUserID(ID);
}
void Flurry :: ExitFlurry()
{
if(!Flurry::log_error)
s3eFlurrySetSessionReportOnClose(true);
}
void Flurry :: LogEvent(const char* data)
{
if(!Flurry::log_error)
s3eFlurryLogEvent(data, false);
}
void Flurry :: addParamterToLogEvent(const char* name, const char* data)
{
if(!Flurry::log_error)
addToHashMap(name, data);
}
void Flurry :: addParamterToLogEvent(const char* name, int data)
{
if(Flurry::log_error)
return;
std::stringstream str;
str << data;
addToHashMap(name, str.str().c_str());
}
void Flurry :: LogEventWithParameters(const char* name)
{
if(!Flurry::log_error)
s3eFlurryLogEventMap(name);
}
void Flurry :: SetUniqueUserID()
{
if(!Flurry::log_error)
Flurry :: SetUserID(s3eDeviceGetString(S3E_DEVICE_UNIQUE_ID));
}
#endif
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论