android - 通过 NDK 获取 App 版本(无 java 层)

原文 标签 android c

如何通过 NDK 获取当前正在运行的应用程序的版本?

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

最佳答案

试试这个代码,

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 获取 App 版本(无 java 层),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33078365/

相关文章:

android - 从 3.4 更新到 cordova 5.1 后无法获取 appView

android - 图像 Intent 和背压

java - Android自定义对话框无法填充整个对话框布局

c - C-无法在用户函数中访问全局变量

c - 如何使用格式说明符检索当前目录之外的文件?

c - 二维动态字符串数组重新分配导致错误

android - Enforce Drive API for Android仅在联机模式下工作

android - SecurityException : Parcel. readException 来自谷歌分析代码

c - 在具有GENERIC_ALL访问权限的ProjectedFS中打开文件(投影文件系统)

c - LCD 基地址