//////////////////////////////////////////////////////////////////////////
//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. 1)Java JDK和JRE

    >JRE :  Java Runtime Enviroment   Java的运行环境.面向Java程序的使用者,而不是开发者.如果你仅下载并安装了JRE,那么你的系统只能运行Java程序(不能 ...

  2. C#导出GridView数据到Excel文件类

    using System; using System.Web; using System.Web.UI; using System.IO; using System.Web.UI.WebControl ...

  3. 图表控件MsChart使用demo

    chart 控件主要有 Titles 标题集合  Chart Area图形显示区域 Series图表集合 Legends图列的集合 (1)  常用事件: 1. Series1.Points.DataB ...

  4. Asp.net Form登陆认证的回顾学习

    asp.net网站中,我最常用的就是Form认证了,在实现登陆时,利用Form认证实现用户的访问权限,哪些页面是可以匿名登陆,哪些页面需要认证后才能访问,哪些页面不能访问等等权限.我还可在登陆时,使用 ...

  5. C#的编译

    Windows上的编译 1:先将C:\Windows\Microsoft.NET\Framework\v3.5配置到系统环境变量的path里. 2:写C#代码 demo1.txt using Syst ...

  6. 实战Django:官方实例Part1

    [写在前面] 撰写这个实战系列的Django文章,是很久之前就有的想法,问题是手头实例太少,一旦开讲,恐有"无米下锅"之忧. 随着对Django学习的深入,渐渐有了些心得,把这些心 ...

  7. Python学习教程(learning Python)--1.3 Python数据输入

    多数应用程序都有数据输入语句,用于读入数据,和用户进行交互,在Python语言里,可以通过raw_input函数实现数据的从键盘读入数据操作. 基本语法结构:raw_input(prompt) 通常p ...

  8. 关于datagridview的一些操作

    1.绑定datatable时,会显示出不需要显示的列可以加datagridview.AutoGenerateColumns = false; 2.如果datagridview的某列是数值型的,有小数, ...

  9. 常用的PC/SC接口函数

    PC/SC规范是一个基于WINDOWS平台的一个标准用户接口(API),提供了一个从个人电脑(Personal Computer)到智能卡(SmartCard)的整合环境,PC/SC规范建立在工业标准 ...

  10. Linux环境PostgreSQL源码编译安装

    Linux环境PostgreSQL源码编译安装 Linux版本: Red Hat 6.4 PostgreSQL版本: postgresql-9.3.2.tar.gz 数据存放目录: /var/post ...