//////////////////////////////////////////////////////////////////////////
//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文件名称, 而不使用硬编码.

[工作积累] NDK通过Java获取package name 和version的更多相关文章

  1. [工作积累] error: bad class file magic (cafebabe) or version (0033.0000)

    Update Android SDK build tool to latest can solve my problem.

  2. [工作积累] Google/Amazon平台的各种坑

    所谓坑, 就是文档中没有标明的特别需要处理的细节, 工作中会被无故的卡住各种令人恼火的问题. 包括系统级的bug和没有文档化的限制. 继Android的各种坑后, 现在做Amazon平台, 遇到的坑很 ...

  3. java获取https网站证书,附带调用https:webservice接口

    一.java 获取https网站证书: 1.创建一个java工程,新建InstallCert类,将以下代码复制进去 package com; import java.io.BufferedReader ...

  4. Java获取XML节点总结之读取XML文档节点

    dom4j是Java的XML API,用来读写XML文件的.目前有很多场景中使用dom4j来读写xml的.要使用dom4j开发,需要下载导入dom4j相应的jar文件.官网下载:http://www. ...

  5. 【java 获取数据库信息】获取MySQL或其他数据库的详细信息

    1.首先是 通过数据库获取数据表的详细列信息 package com.sxd.mysqlInfo.test; import java.sql.Connection; import java.sql.D ...

  6. java获取时间戳的方法

    JAVA 获取当前月的初始时间的时间戳 public static long getMonthFirstDay() { Calendar calendar = Calendar.getInstance ...

  7. Java获取各种常用时间方法大全

    Java获取各种常用时间方法大全 package cc.javaweb.test; Java中文网,Java获取各种时间大全 import java.text.DateFormat; import j ...

  8. Java 获取APK安装程序的包名

     Java 获取APK安装程序的包名核心的两个类:  ResPackage ApkDecoder  package com.temobi.util; import java.io.File; impo ...

  9. NDK 通过java调用so文件

    首先我们来看so文件的来源 1. 自己写.c文件,然后生成so库 2. 引用别人的静态库,或者动态库来生成新的jni调用库. 我们先来看最简单的编写一个jni调用的so库,包含一个获取字符串的方法,通 ...

随机推荐

  1. Delphi For Android 开发笔记 1 - 开发工具介绍

    在开始前,推荐喜欢delphi或者pascal的朋友,如果想将原来Windows的软件工程移植到Android,可使用CodeTyphon+Delphi XE7进行开发. 1.CodeTyphon C ...

  2. (转)C#与Java的证书密钥转换

    前言 最近由于项目需求,服务端由c#编写,客户端由java编写.通信数据使用RSA非对称加密.但是java和c#生成的密钥格式是不一样的,所以需要转换格式才可以正常使用.网上搜到使用java进行格式转 ...

  3. SQL Server 基础:拾遗

    1.一条完整的sql语句: select top | distinct 字段, 表达式, 函数, ... from 表表达式 where 筛选条件 group by 分组条件 having 筛选条件 ...

  4. 十天学会单片机Day1点亮数码管(数码管、外部中断、定时器中断)

    1.引脚定义 P3口各引脚第二功能定义 标号 引脚 第二功能 说明 P3.0 10 RXD 串行输入口 P3.1 11 TXD 串行输出口 P3.2 12 INT0(上划线) 外部中断0 P3.3 1 ...

  5. 在EF的code frist下写稳健的权限管理系统:MVC过滤拦截,权限核心(五)

    [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited = true, AllowMultiple = ...

  6. python基础学习笔记第四天 list 元祖 字典

    一 LIST方法 列表操作包含以下函数:1.cmp(list1, list2):比较两个列表的元素 2.len(list):列表元素个数 3.max(list):返回列表元素最大值 4.min(lis ...

  7. MIFARE系列8《D8M1.exe》

    软件名:D8M1.exe 更新时间:2014.06.28 操作系统:windowAll 外部设备:D8读卡器 D8M1可以对MIFARE块读写操作,支持1K,4K.检验KEY后返回SAK,QTAQ,U ...

  8. sed实例一则

    1.背景: test.txt文件里有这些语句 li^E1026^D20150802B07QH800^B698.^C20150801B08CDP00^B514.^C20150803D00A8L00^B2 ...

  9. C#中的委托与事件

    1,委托? 通俗来讲,就是一个能存放符合某种格式(签名)的方法的指针 的容器  (可以将方法作为一个参数来传递到另一个方法内执行) 定义委托:delegate string DelegateSayHi ...

  10. 推荐几款web站点JS(JQeury)图表(饼图,柱图,线图)

    一 Google Chart Tools 官网:https://developers.google.com/chart/ 谷歌图表工具提供了一个完美的方式形象化您的网站上的数据.从简单到复杂的层次结构 ...