1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-04 12:00:25 +00:00

Update the GodotHost interface to support signing and verifying Android apks

Update the export logic to enable apk generation and signing for Android editor builds

Note: Only legacy builds are supported. Gradle builds are not supported at this point in time.
This commit is contained in:
Fredia Huya-Kouadio
2024-06-16 12:14:34 -07:00
parent 794ea99240
commit a5897d579b
26 changed files with 241 additions and 76 deletions

View File

@@ -84,6 +84,8 @@ GodotJavaWrapper::GodotJavaWrapper(JNIEnv *p_env, jobject p_activity, jobject p_
_dump_benchmark = p_env->GetMethodID(godot_class, "nativeDumpBenchmark", "(Ljava/lang/String;)V");
_get_gdextension_list_config_file = p_env->GetMethodID(godot_class, "getGDExtensionConfigFiles", "()[Ljava/lang/String;");
_has_feature = p_env->GetMethodID(godot_class, "hasFeature", "(Ljava/lang/String;)Z");
_sign_apk = p_env->GetMethodID(godot_class, "nativeSignApk", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I");
_verify_apk = p_env->GetMethodID(godot_class, "nativeVerifyApk", "(Ljava/lang/String;)I");
}
GodotJavaWrapper::~GodotJavaWrapper() {
@@ -424,3 +426,42 @@ bool GodotJavaWrapper::has_feature(const String &p_feature) const {
return false;
}
}
Error GodotJavaWrapper::sign_apk(const String &p_input_path, const String &p_output_path, const String &p_keystore_path, const String &p_keystore_user, const String &p_keystore_password) {
if (_sign_apk) {
JNIEnv *env = get_jni_env();
ERR_FAIL_NULL_V(env, ERR_UNCONFIGURED);
jstring j_input_path = env->NewStringUTF(p_input_path.utf8().get_data());
jstring j_output_path = env->NewStringUTF(p_output_path.utf8().get_data());
jstring j_keystore_path = env->NewStringUTF(p_keystore_path.utf8().get_data());
jstring j_keystore_user = env->NewStringUTF(p_keystore_user.utf8().get_data());
jstring j_keystore_password = env->NewStringUTF(p_keystore_password.utf8().get_data());
int result = env->CallIntMethod(godot_instance, _sign_apk, j_input_path, j_output_path, j_keystore_path, j_keystore_user, j_keystore_password);
env->DeleteLocalRef(j_input_path);
env->DeleteLocalRef(j_output_path);
env->DeleteLocalRef(j_keystore_path);
env->DeleteLocalRef(j_keystore_user);
env->DeleteLocalRef(j_keystore_password);
return static_cast<Error>(result);
} else {
return ERR_UNCONFIGURED;
}
}
Error GodotJavaWrapper::verify_apk(const String &p_apk_path) {
if (_verify_apk) {
JNIEnv *env = get_jni_env();
ERR_FAIL_NULL_V(env, ERR_UNCONFIGURED);
jstring j_apk_path = env->NewStringUTF(p_apk_path.utf8().get_data());
int result = env->CallIntMethod(godot_instance, _verify_apk, j_apk_path);
env->DeleteLocalRef(j_apk_path);
return static_cast<Error>(result);
} else {
return ERR_UNCONFIGURED;
}
}