首页 文章 精选 留言 我的

精选列表

搜索[android studio],共10000篇文章
优秀的个人博客,低调大师

《Android的设计与实现:卷I》——第2章 2.3 JNI总管:JNIEnv

2.3 JNI总管:JNIEnv 在Log系统的实例中,JNI层实现方法和注册方法中都使用了JNIEnv这个指针,通过它调用JNI函数,访问Java虚拟机,进而操作Java对象。JNIEnv是JNI编程中最重要的概念,本节将详细介绍它。首先看JNIEnv的体系结构,如图2-2所示。 在图2-2中可以看到,JNIEnv首先指向一个线程相关的结构,该结构又指向一个指针数组,在这个指针数组中的每个元素最终指向一个JNI函数。所以可以通过JNIEnv去调用JNI函数。 打开jni.h文件看看这部分内容是如何设计的。由于不同平台上有不同的jni.h文件,只需要取一个加以分析,这里打开libnativehelper/include/nativehelper/jni.h。 在jni.h中,为了兼容C和C++两种代码,使用宏__cplusplus加以区分。首先看JNIEnv在文件中是如何定义的: 这里仅仅是用typedef关键字做了类型定义。那么_JNIEnv和JNINativeInterface又是什么类型呢?_JNIEnv结构体的源码如下: 以上是对 const struct JNINativeInterface类型的包装,并间接调用了const struct JNINativeInterface 上定义的方法。继续分析JNINativeInterface 的定义,代码如下:struct JNINativeInterface { …… jclass (FindClass)(JNIEnv, const char); jint (ThrowNew)(JNIEnv , jclass, const char ); …… 这里才真正涉及JNI函数的调用。当然,这里也只是个接口,具体的实现要参考虚拟机实现。 最终可以得到如下结论: C++中:JNIEnv就是struct _JNIEnv。 JNIEnv env等价于struct _JNIEnvenv,在调用JNI函数的时候,只需要env-> FindClass(JNIEnv, const char),就会间接调用JNINativeInterface结构体里定义的函数指针,而无需首先对env解引用。 C中:JNIEnv就是const struct JNINativeInterface。JNIEnv env实际等价于const struct JNINativeInterface? env,因此要得到JNINativeInterface结构体内的函数指针就必须先对env解引用得到(env),即const struct JNINativeInterface,这个指针才是真正指向JNINativeInterface结构体的指针,然后再通过它调用具体的JNI函数。因此需要这样调用:(env)-> FindClass(JNIEnv, const char)。 注意 JNIEnv只在当前线程中有效。本地方法不能将JNIEnv从一个线程传递到另一个线程中。相同的 Java 线程中对本地方法多次调用时,传递给该本地方法的JNIEnv是相同的。但是,一个本地方法可被不同的 Java 线程所调用,因此可以接受不同的 JNIEnv。

优秀的个人博客,低调大师

《Android应用开发攻略》——3.8 用BugSense自动从用户那里得到缺陷报告

3.8 用BugSense自动从用户那里得到缺陷报告 Ian Darwin3.8.1 问题每当你的应用程序崩溃的时候,用户并不一定都会通知你,即便通知,也往往忽略了重要的细节。你希望有一个服务能够捕捉所有异常,并且提供详细的报告。3.8.2 解决方案注册BugSense(免费或者Premium版本),在应用程序中添加一个JAR文件和一个调用。然后坐等通知,或者查看Web仪表板上的错误列表和详情页面。3.8.3 讨论BugSense服务没有什么魔法,它所提供的也不是你自己做不到的事情。但是已经有了它,就好好地利用吧!使用BugSense的基本步骤如下:1 . 创建BugSense免费或者Premium版本的账号。2 . 注册你的应用程序并从网站上获得唯一的键码。3 . 下载JAR文件,添加到你的项目中。4 .

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册