bool BootAnimation::threadLoop()
{
    bool r;
    if (mAndroidAnimation) {
        r = android();
    } else {
        r = movie();
    }

    eglMakeCurrent(mDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
    eglDestroyContext(mDisplay, mContext);
    eglDestroySurface(mDisplay, mSurface);
    mFlingerSurface.clear();
    mFlingerSurfaceControl.clear();
    eglTerminate(mDisplay);
    IPCThreadState::self()->stopProcess();
    return r;
}
bool BootAnimation::threadLoop()
{
    bool r;
    // We have no bootanimation file, so we use the stock android logo
    // animation.
    if (mZip == NULL) {
        r = android();
    } else {
        r = movie();
    }

    eglMakeCurrent(mDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
    eglDestroyContext(mDisplay, mContext);
    eglDestroySurface(mDisplay, mSurface);
    mFlingerSurface.clear();
    mFlingerSurfaceControl.clear();
    eglTerminate(mDisplay);
    IPCThreadState::self()->stopProcess();
    return r;
}
bool BootAnimation::threadLoop()
{
    bool r;
    if (mAndroidAnimation) {
        r = android();
    } else {
        r = movie();
    }

    // No need to force exit anymore
    property_set(EXIT_PROP_NAME, "0");

    eglMakeCurrent(mDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
    eglDestroyContext(mDisplay, mContext);
    eglDestroySurface(mDisplay, mSurface);
    mFlingerSurface.clear();
    mFlingerSurfaceControl.clear();
    eglTerminate(mDisplay);
    IPCThreadState::self()->stopProcess();
    return r;
}
Esempio n. 4
0
INT main(INT argc, TCHAR* argv[])
{
	//printf("Dedroid Apk parser:\n\tusage: dedroid.exe [apkfile]\n");
	if (argc < 2) return 0;

	cAndroidFile android(argv[1]/*"H:\\Github\\Dedroid\\Dedroid\\Debug\\sample.apk"*/);

	if (android.isReady)
	{
		cFile** tmp = android.DecompressResourceFiles();
		//printf("DexFile Loaded at 0x%08x with size %d bytes\n\n", android.DexBuffer, android.DexBufferSize);

		//printf("= Strings ==========\n");
		//for (UINT i=0; i<android.nStringItems; i++)
		//	printf("%d %s\n", android.StringItems[i].StringSize, android.StringItems[i].Data);

		/*printf(	"Total String Items: \t%d\n"
				"      Type Descripters \t%d\n"
				"      Method Items \t%d\n"
				"      Field Items \t%d\n"
				"      Prototype Items \t%d\n", 
				android.nStringIDs,
				android.nTypeIDs,
				android.nMethodIDs,
				android.nFieldIDs,
				android.nPrototypeIDs);

		printf("\n= ResourceFiles ======\n\n");
		for (UINT i=0; i<android.nResourceFiles; i++)
			printf("%s\n", android.ResourceFiles[i]);*/

		//printf("\n= Field Items ======\n\n");
		//for (UINT i=0; i<android.nFieldIDs; i++)
		//	printf("%s\n", android.StringItems[android.DexFieldIds[i].StringIndex].Data);

		//printf("\n= Type Descripters =\n\n");
		//for (UINT i=0; i<android.nTypeIDs; i++)
		//	printf("%s\n", android.StringItems[android.DexTypeIds[i].StringIndex].Data);

		//printf("\n= Method Items =====\n\n");
		//for (UINT i=0; i<android.nMethodIDs; i++)
		//	printf("%s\n", android.StringItems[android.DexMethodIds[i].StringIndex].Data);

		//printf("\n= Prototype Items ==\n\n");
		//for (UINT i=0; i<android.nPrototypeIDs; i++)
		//	printf("%s\n", android.StringItems[android.DexProtoIds[i].StringIndex].Data);

		for (UINT i=0; i<0/*android.nClassDefinitions*/; i++)
		{
			//printf("%s\n", android.StringItems[android.DexClassDefs[i].sourceFileIdx].Data);
			printf("\nClass #%d:\n" 
				"\tClass Descriptor: '%s'\n"	"\tAccess Flags: 0x%04x\n"
				"\tSuper Class: '%s'\n"			"\tSource File: '%s'\n\n",
				i, android.DexClasses[i].Descriptor,
				android.DexClasses[i].AccessFlags, android.DexClasses[i].SuperClass,
				android.DexClasses[i].SourceFile);

			printf("\tStatic Fields: %d\n", android.DexClasses[i].ClassData->StaticFieldsSize);
			for (UINT j=0; j< android.DexClasses[i].ClassData->StaticFieldsSize; j++)
			{
				printf("\t#%d\n", j);
				printf("\t\tName: '%s'\n", android.DexClasses[i].ClassData->StaticFields[j].Name);
				printf("\t\tType: '%s'\n", android.DexClasses[i].ClassData->StaticFields[j].Type);
				printf("\t\tAccess: 0x%x\n", android.DexClasses[i].ClassData->StaticFields[j].AccessFlags);
			}

			printf("\n\tInstance Fields: %d\n", android.DexClasses[i].ClassData->InstanceFieldsSize);
			for (UINT j=0; j< android.DexClasses[i].ClassData->InstanceFieldsSize; j++)
			{
				printf("\t#%d\n", j);
				printf("\t\tName: '%s'\n", android.DexClasses[i].ClassData->InstanceFields[j].Name);
				printf("\t\tType: '%s'\n", android.DexClasses[i].ClassData->InstanceFields[j].Type);
				printf("\t\tAccess: 0x%x\n", android.DexClasses[i].ClassData->InstanceFields[j].AccessFlags);
			}

			printf("\n\tDirect Methods: %d\n", android.DexClasses[i].ClassData->DirectMethodsSize);
			for (UINT j=0; j< android.DexClasses[i].ClassData->DirectMethodsSize; j++)
			{
				printf("\t#%d\n", j);
				printf("\t\tName: '%s'\n", android.DexClasses[i].ClassData->DirectMethods[j].Name);
				printf("\t\tType: '%s'\n", android.DexClasses[i].ClassData->DirectMethods[j].ProtoType);
				printf("\t\tAccess: 0x%x\n", android.DexClasses[i].ClassData->DirectMethods[j].AccessFlags);
			}

			printf("\n\tVirtual Methods: %d\n", android.DexClasses[i].ClassData->VirtualMethodsSize);
			for (UINT j=0; j< android.DexClasses[i].ClassData->VirtualMethodsSize; j++)
			{
				printf("\t#%d\n", j);
				printf("\t\tName: '%s'\n", android.DexClasses[i].ClassData->VirtualMethods[j].Name);
				printf("\t\tType: '%s'\n", android.DexClasses[i].ClassData->VirtualMethods[j].ProtoType);
				printf("\t\tAccess: 0x%x\n", android.DexClasses[i].ClassData->VirtualMethods[j].AccessFlags);
			}
		}
	}
	else 
		printf("Unable to load your APK file\n");

	system("PAUSE");
	return 0;
}