果酱乱舞

发布于 2024-12-17 09:25:56 字数 4113 浏览 0 评论 0原文

使用 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=0x249730

11-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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文