[工作积累] 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 ) {
        //jchar is UTF16
        jsize len = (*env)->GetStringLength(env, PackageName);

        const jchar* jcharBuff = (*env)->GetStringChars(env, PackageName, NULL);
        //Copy jcharBuff to outPckageName with code conversion(UTF16 to UTF8)
        #error do code conversion

        (*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;
}

[工作积累] NDK通过Java获取package name 和version

时间: 2024-08-08 08:30:49

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

工作积累之NDK编译STL (zhuan)

方法: 1.在jni目录下新建Application.mk; 加入 APP_STL :=  stlport_static  右边的值还可以换成下面几个: system - 使用默认最小的C++运行库,这样生成的应用体积小,内存占用小,但部分功能将无法支持 stlport_static - 使用STLport作为静态库,这项是Android开发网极力推荐的 stlport_shared - STLport 作为动态库,这个可能产生兼容性和部分低版本的Android固件,目前不推荐使用. gnust

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

所谓坑, 就是文档中没有标明的特别需要处理的细节, 工作中会被无故的卡住各种令人恼火的问题. 包括系统级的bug和没有文档化的限制. 继Android的各种坑后, 现在做Amazon平台, 遇到的坑很多, 这里记录一下备忘: 先汇总下Android Native下的各种问题, 当然有些限制有明确文档说明,不算坑,但是限制太多还是很不爽: android平台下的某些限制: android下的各种坑 (我的C/C++/汇编/计算机原理博客) OBB的各种bug: OBB的解决方案 arm gcc t

java 获取公网(外网IP)很实用!

package com.lovo.util; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; public class PublicInterIp { /** * @param args * @throws Exception */ public S

android的NDK和java进行本地socket通信

关于Android应用与Framework的socket通信,相信关心这个问题的朋友们已经看过<android使用socket使底层和framework通信>这篇文章,美中不足的是作者只贴出一些关键的代码片段而并没有放出源码.我这里还是以一个能实际运行的例子为基础来讲,这样也方便大家学习. 首先看一下效果,如下图.我填写姓名"Potter",选择性别"Mr"然后点击发送,底层socket收到消息后将消息直接返回给我,我将返回的结果(Mr.Potter)直

java 获取服务器时间同步本地计算机时间

http://hi.baidu.com/captives/item/25c8b80170a9b0ccf45ba6f8 -------------------------------------------------------- package dtm.tools;            import java.io.BufferedInputStream;      import java.io.BufferedReader;      import java.io.IOException;

java 获取本机ip及mac地址

package com.achun.test; import java.net.Inet4Address;import java.net.Inet6Address;import java.net.InetAddress;import java.net.NetworkInterface;import java.util.Enumeration; public class HelloWorld { public static void main(String[] args) { // TODO Au

关于Java获取本地服务器IP的问题

Java获取本地服务器IP,我们最简单的写法: import java.net.InetAddress; public class CatchIp{ public static void main(String[] args) { try { // 获取IP地址 String ip = InetAddress.getLocalHost().getHostAddress(); System.out.println("IP地址:"+ip); } catch (Exception e) {

java获取它运行所在目录信息

对于Java程序,无论是未打包的还是打包的JAR或WAR文件,有时候都需要获取它运行所在目录信息,如何做到这一点呢?  在Java处理的文件系统中,目录的表示方式有两种:  (1)绝对目录,它以"/"为起始字符,代表从根目录下开始寻找给出的目录,如/c:/java  (2)相对路径,它以不带"/"的目录名表示,表示以当前Java程序正在运行的目录作为起始目录来寻找给出的目录.如java/classes.在相对路径中,有一些特定的字符,可以代表特的的目录,比如,&qu

转:微信开发之使用java获取签名signature(贴源码,附工程)

微信开发之使用java获取签名signature(贴源码,附工程) 标签: 微信signature获取签名 2015-12-29 22:15 6954人阅读 评论(3) 收藏 举报  分类: 微信开发(5)  版权声明:本文为博主原创文章,转载注明出处http://blog.csdn.net/u013142781 目录(?)[+] 一.前言 微信接口调用验证最终需要用到的三个参数noncestr.timestamp.signature: 接下来将会给出获取这三个参数的详细代码 本文的环境ecli