Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get Version of App by NDK (no java layer)

Tags:

c

android

how can I get the Version of my current running App by NDK?

I can get the name and the package, but I need the Version.

like image 368
maxschwa Avatar asked Feb 19 '26 19:02

maxschwa


1 Answers

Try this code,

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;
}
like image 87
deimus Avatar answered Feb 21 '26 07:02

deimus