[工作積累] NDK通過Java獲取package name 和version


//////////////////////////////////////////////////////////////////////////
//Java code snippet
//get APK's versionCode in AndroidManifest.xml
public int getVersionCode() {
int versionCode = 1;
try{
PackageInfo packageInfo = this.getPackageManager().getPackageInfo(getPackageName(), 0);
versionCode = packageInfo.versionCode;
}catch (NameNotFoundException e) {
Log.d(TAG, "cannot get package info.");
}
return versionCode;
}

 

 
         
// --------------------------------------------------------------------
// C code snippet: helper function to get package name from Java
// --------------------------------------------------------------------
static bool Android_GetPackageName(char* outPackageName, size_t length) {

    Android_App* app = Android_GetApp();
    ANativeActivity*activity = app->activity;

    JNIEnv* env = activity->env;
    //note: we need to attach dalvik VM to current thread, as it is not main thread
    JavaVM* vm = activity->vm;
    if ( (*vm)->GetEnv(vm, (void **)&env, JNI_VERSION_1_6) < 0 )
        (*vm)->AttachCurrentThread(vm, &env, NULL);

    //get package name from Activity Class(context)
    jclass android_content_Context = (*env)->GetObjectClass(env, activity->clazz);
    jmethodID midGetPackageName = (*env)->GetMethodID(env, android_content_Context, "getPackageName", "()Ljava/lang/String;");
    jstring PackageName= (jstring)(*env)->CallObjectMethod(env, activity->clazz, midGetPackageName);

    bool ret = false;
    if( PackageName != null ) {
        // get UTF8 string & copy to dest
const char* charBuff = (*env)->GetStringUTFChars(env, PackageName, NULL);
        strncpy(outPackageName, charBuff, length);
outPackageName[length-1]='\0';

(*env)->ReleaseStringUTFChars(PackageName, charBuff); (
*env)->DeleteLocalRef(env, PackageName); } (*env)->DeleteLocalRef(env, android_content_Context); return ret; } // -------------------------------------------------------------------- // helper function to get package version code from Java // -------------------------------------------------------------------- static int Android_GetVersionCode() { Android_App* app = Android_GetApp(); ANativeActivity*activity = app->activity; //get version code from Java JNIEnv* env = activity->env; //note: we need to attach dalvik VM to current thread, as it is not main thread JavaVM* vm = activity->vm; if ( (*vm)->GetEnv(vm, (void **)&env, JNI_VERSION_1_6) < 0 ) (*vm)->AttachCurrentThread(vm, &env, NULL); jclass ActivityClass = (*env)->GetObjectClass(env, activity->clazz); jmethodID java_method = (*env)->GetMethodID(env, ActivityClass, (char8*)"getVersionCode", (char8*)"()I"); assert( java_method != NULL ); jint ret = (*env)->CallIntMethod(env, activity->clazz , java_method); (*env)->DeleteLocalRef(env, ActivityClass); return (int)ret; }

 通過以上方法可以動態生成OBB文件名稱, 而不使用硬編碼.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM