예제 #1
0
std::string GetAppCachePath()
{
	LogMsg("Getting app cache..");

	JNIEnv *env = GetJavaEnv();
	if (!env) 
		return "";

	//first see if we can access an external storage method
	jclass		cls = env->FindClass(GetAndroidMainClassName());
	jmethodID	mid = env->GetStaticMethodID(cls, "get_externaldir", "()Ljava/lang/String;");
	jstring		ret = (jstring)env->CallStaticObjectMethod(cls, mid);
	const char* ss	= env->GetStringUTFChars(ret,0);
	std::string tmp = ss;
	env->ReleaseStringUTFChars(ret, ss);
	std::string retString = std::string(tmp);

	if (!retString.empty())
	{
		retString += std::string("/Android/data/")+GetBundlePrefix()+GetBundleName()+"/files/";
		
		return retString;
	}

	retString = GetSavePathBasic();

	return retString; //invalid
}
예제 #2
0
bool IsAppInstalled(std::string packageName)
{
	JNIEnv *env = GetJavaEnv();
	
	if (!env) 
		return false;
	
	jclass cls = env->FindClass(GetAndroidMainClassName());
	jmethodID mid = env->GetStaticMethodID(cls,	"is_app_installed",	"(Ljava/lang/String;)I");
	return env->CallStaticIntMethod(cls, mid, env->NewStringUTF(packageName.c_str())) != 0;
}
예제 #3
0
void LaunchURL(std::string url)
{
	JNIEnv *env = GetJavaEnv();
	LogMsg("Launching %s", url.c_str());

	if (!env) 
		return;
	jclass cls = env->FindClass(GetAndroidMainClassName());
	jmethodID mid = env->GetStaticMethodID(cls,	"LaunchURL", "(Ljava/lang/String;)V");
	env->CallStaticVoidMethod(cls, mid, env->NewStringUTF(url.c_str()));
}
예제 #4
0
void FireAchievement(std::string achievement)
{
	JNIEnv *env = GetJavaEnv();
	LogMsg("Attempting to fire Achievement %s", achievement.c_str());

	if (!env) 
		return;
	jclass cls = env->FindClass(GetAndroidMainClassName());
	jmethodID mid = env->GetStaticMethodID(cls,	"HandleAchievement", "(Ljava/lang/String;)V");
	env->CallStaticVoidMethod(cls, mid, env->NewStringUTF(achievement.c_str()));
}
jclass FAndroidApplication::FindJavaClass( const char* name )
{
	JNIEnv* Env = GetJavaEnv();
	if (!Env)
	{
		return nullptr;
	}
	jstring ClassNameObj = Env->NewStringUTF(name);
	jclass FoundClass = static_cast<jclass>(Env->CallObjectMethod(ClassLoader, FindClassMethod, ClassNameObj));
	CheckJavaException();
	Env->DeleteLocalRef(ClassNameObj);
	return FoundClass;
}
예제 #6
0
std::string GetRegionString()
{
	JNIEnv *env = GetJavaEnv();
	if (!env) return "";

	jclass cls = env->FindClass(GetAndroidMainClassName());
	jmethodID mid = env->GetStaticMethodID(cls,	"get_region", "()Ljava/lang/String;");
	jstring ret;
	ret = (jstring)env->CallStaticObjectMethod(cls, mid);
	const char* ss	= env->GetStringUTFChars(ret,0);
	std::string tmp = ss;
	env->ReleaseStringUTFChars(ret, ss);
	return std::string(tmp);
}
bool FAndroidApplication::CheckJavaException()
{
	JNIEnv* Env = GetJavaEnv();
	if (!Env)
	{
		return true;
	}
	if (Env->ExceptionCheck())
	{
		Env->ExceptionDescribe();
		Env->ExceptionClear();
		verify(false && "Java JNI call failed with an exception.");
		return true;
	}
	return false;
}
예제 #8
0
void CreateDirectoryRecursively(std::string basePath, std::string path)
{
#ifdef _DEBUG
	//LogMsg("CreateDirectoryRecursively: %s, path is %s", basePath.c_str(), path.c_str());
#endif
	
	JNIEnv *env = GetJavaEnv();
	if (!env) 
		return;

	jclass cls = env->FindClass(GetAndroidMainClassName());
	jmethodID mid = env->GetStaticMethodID(cls,	"create_dir_recursively", "(Ljava/lang/String;Ljava/lang/String;)V");
	jstring ret;
	env->CallStaticVoidMethod(cls, mid, env->NewStringUTF(basePath.c_str()), env->NewStringUTF(path.c_str()));
	return;
}
void FAndroidApplication::InitializeJavaEnv( JavaVM* VM, jint Version, jobject GlobalThis )
{
	if (CurrentJavaVM == nullptr)
	{
		CurrentJavaVM = VM;
		CurrentJavaVersion = Version;

		JNIEnv* Env = GetJavaEnv(false);
		jclass MainClass = Env->FindClass("com/epicgames/ue4/GameActivity");
		jclass classClass = Env->FindClass("java/lang/Class");
		jclass classLoaderClass = Env->FindClass("java/lang/ClassLoader");
		jmethodID getClassLoaderMethod = Env->GetMethodID(classClass, "getClassLoader", "()Ljava/lang/ClassLoader;");
		jobject classLoader = Env->CallObjectMethod(MainClass, getClassLoaderMethod);
		ClassLoader = Env->NewGlobalRef(classLoader);
		FindClassMethod = Env->GetMethodID(classLoaderClass, "findClass", "(Ljava/lang/String;)Ljava/lang/Class;");
	}
	GlobalObjectRef = GlobalThis;
}
예제 #10
0
std::string GetAPKFile()
{
	JNIEnv *env = GetJavaEnv();
	if (!env)
	{
		LogMsg("GetAPKFile>  Error, can't do this yet, no java environment");
		return "";
	}

	LogMsg("Getting apk file for %s from the Java side...",GetAndroidMainClassName());
	jclass cls = env->FindClass(GetAndroidMainClassName());
	jmethodID mid = env->GetStaticMethodID(cls,	"get_apkFileName", "()Ljava/lang/String;");
	jstring ret;
	ret = (jstring)env->CallStaticObjectMethod(cls, mid);
	const char* ss	= env->GetStringUTFChars(ret,0);
	std::string tmp = ss;
	env->ReleaseStringUTFChars(ret, ss);
	return std::string(tmp);
}