【问题标题】:How to get app Build Configuration (Debug or release) using JNI android?如何使用 JNI android 获取应用程序构建配置(调试或发布)?
【发布时间】:2020-04-12 05:35:30
【问题描述】:

我正在开发一个 android 项目中的 so 库。我需要使用 JNI 在本机代码上检查应用程序的构建配置(调试或发布)。最好的方法是什么?

【问题讨论】:

标签: java android java-native-interface jnienv


【解决方案1】:

假设您的包是com.example.hellojni,这会从BuildConfig 类中获取DEBUGBUILD_TYPE 静态字段:

extern "C" JNIEXPORT jstring JNICALL
Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env, jobject thiz )
{
    jclass cls_HelloJni = env->FindClass("com/example/hellojni/BuildConfig");
    jfieldID fid_HelloJNI_buildType = env->GetStaticFieldID(cls_HelloJni, "BUILD_TYPE", "Ljava/lang/String;");
    jfieldID fid_HelloJNI_debug = env->GetStaticFieldID(cls_HelloJni, "DEBUG", "Z");
    jstring jBuildType = (jstring) env->GetStaticObjectField(cls_HelloJni, fid_HelloJNI_buildType);
    jboolean jDebug = env->GetStaticBooleanField(cls_HelloJni,fid_HelloJNI_debug);
    const char * buildType = env->GetStringUTFChars(jBuildType, nullptr);
    std::string out = (std::stringstream() << "Build type is " << buildType << ", debug says " << (jDebug ? "debug" : "not debug")).str();
    env->ReleaseStringUTFChars(jBuildType, buildType);

    return (env)->NewStringUTF(out.c_str());
}

【讨论】:

  • 非常感谢先生,您的回答也将解决我的许多问题。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-19
相关资源
最近更新 更多