1

使用 Marmalade 和 EDK Flurry 编写了简单的代码。

应用程序仅启动会话,发送一个日志事件并停止。

在摩托罗拉 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): "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): at com.ideaworks3d.marmalade.LoaderThread.runNative(Native Method)

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):VM 中止

更新: 代码:-

#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
4

0 回答 0