[工作积累] NDK通过Java获取package name 和version
2024-10-19 15:49:43
//////////////////////////////////////////////////////////////////////////
//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) < )
(*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) < )
(*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文件名称, 而不使用硬编码.
最新文章
- 【GO】GO语言学习笔记三
- C#小小总结(面向对象)
- android时区
- gulp.js简单操作
- C++控制台应用程序之贪吃蛇(改进版)
- ☀【JS】eval
- Asp.net中request.QueryString与request.Params的区别 【转】
- hasClass方法 动画方法说明
- 类似jquery的一个demo
- iOS一个开发系列中 - UIButton 使用摘要
- 永洪BI配置测试及遇到的一些问题
- mysql5.6 online ddl—索引
- Spring 学习笔记 Bean的作用域
- Android Demo Android ActionBarCompat-ListPopupMenu
- node.js cluster模式启用方式
- Spring MVC — @RequestMapping原理讲解-1
- POJ 2636
- Java虚拟机--内存模型与线程
- python---django中orm的使用(4)字段,参数(on_delete重点)补充,一对多,一对一,多对多
- stickey-footer实现footer固定页面底部
热门文章
- 极路由1s手工安装ss插件
- Android Material Design:基于CoordinatorLayout实现向上滚动导航条ToolBar滚出、向下滚动导航条滚出
- Delphi的";Invalid pointer operation";异常的解决办法
- 压力测试之TCPP
- 007-python基础-pyc是什么
- Python脚本控制的WebDriver 常用操作 <;十一>; 操作测试对象
- jQuery对象与DOM对象
- bzoj 1798 [Ahoi2009]Seq 维护序列seq
- 记录bigdesk中ElasticSearch的性能参数
- 解压vmlinuz和解压initrd(initramfs)