android - 通过 NDK 获取应用程序版本(无 java 层)

标签 android c

如何通过 NDK 获取当前正在运行的 App 的版本?

我可以得到名称和包,但我需要版本。

最佳答案

试试这段代码,

int getVersionCode(JNIEnv *env, jobject context) {
    jstring packageName;
    jobject packageManagerObj;
    jobject packageInfoObj;
    jclass contextClass =  env->GetObjectClass( context);
         jmethodID getPackageNameMid = env->GetMethodID( contextClass, "getPackageName", "()Ljava/lang/String;");
         jmethodID getPackageManager =  env->GetMethodID( contextClass, "getPackageManager", "()Landroid/content/pm/PackageManager;");

    jclass packageManagerClass = env->FindClass("android/content/pm/PackageManager");
         jmethodID getPackageInfo = env->GetMethodID( packageManagerClass, "getPackageInfo", "(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;");

    jclass packageInfoClass = env->FindClass("android/content/pm/PackageInfo");
         jfieldID versionCodeFid = env->GetFieldID( packageInfoClass, "versionCode", "I");

    packageName =  (jstring)env->CallObjectMethod( context, getPackageNameMid);

    packageManagerObj = env->CallObjectMethod(context, getPackageManager);

    packageInfoObj = env->CallObjectMethod( packageManagerObj,getPackageInfo, packageName, 0x0);
    int versionCode = env->GetIntField( packageInfoObj, versionCodeFid);

    return versionCode;
}

关于android - 通过 NDK 获取应用程序版本(无 java 层),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33078365/

相关文章:

android - 如何在没有任何延迟和第二个元素延迟的情况下获取第一个元素?

c - "..."c 静态函数的最后一个参数

c++ - 如何保存 - 恢复所有 opengl 状态变量

android - 清除内存不足异常的堆内存

java - Android Studio 3.0 金丝雀 8 : Advanced profiling is unavailable for the selected process

c - 学生并行编程项目的想法

c - 如何从具有 NULL 的无符号字符数组写入数据?

c - C 中是否有 sizeof() 的等价物?

android - 由于 facebookconnect 插件,Android 的 Phonegap 构建失败

java - 使用 SimpleAdapter 排序