Написал простой код, используя Marmalade с EDK Flurry.
приложение только запускает сеанс, отправляет одно событие журнала и останавливается.
На Motorola Flipout это приложение отлично работает без аварий.
Но на Samsung 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): "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 = 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