
android
jsn_ze
这个作者很懒,什么都没留下…
展开
-
Android.mk简介
做Android开发的人员都知道,Java的计算能力和图片能力都不出色,所以要依赖C++来完成。而且C++写的标准库还能真正意义上跨平台,只是编译稍微要有点不同。要做好NDK编译工作还是需要花费不少心思的,像Android.mk就是必须不可缺少的。0. Android.mk简介:Android.mk文件用来告知NDK Build 系统关于Source的信息。 Android.mk将是G转载 2017-01-16 20:51:02 · 349 阅读 · 0 评论 -
Android NDK开发Crash错误定位
在Android开发中,程序Crash分三种情况:未捕获的异常、ANR(Application Not Responding)和闪退(NDK引发错误)。其中未捕获的异常根据logcat打印的堆栈信息很容易定位错误。ANR错误也好查,Android规定,应用与用户进行交互时,如果5秒内没有响应用户的操作,则会引发ANR错误,并弹出一个系统提示框,让用户选择继续等待或立即关闭程序。并会在/data/a转载 2017-06-08 22:36:26 · 480 阅读 · 0 评论 -
NI/NDK开发指南(开山篇)
相信很多做过Java或Android开发的朋友经常会接触到JNI方面的技术,由其做过Android的朋友,为了应用的安全性,会将一些复杂的逻辑和算法通过本地代码(C或C++)来实现,然后打包成so动态库文件,并提供Java接口供应用层调用,这么做的目的主要就是为了提供应用的安全性,防止被反编译后被不法分子分析应用的逻辑。当然打包成so也不能说完全安全了,只是相对反编译Java的class字节码文件转载 2017-06-08 22:37:30 · 340 阅读 · 0 评论 -
JNI/NDK开发指南(二)——JVM查找java native方法的规则
通过第一篇文章,大家明白了调用native方法之前,首先要调用System.loadLibrary接口加载一个实现了native方法的动态库才能正常访问,否则就会抛出java.lang.UnsatisfiedLinkError异常,找不到XX方法的提示。现在我们想想,在Java中调用某个native方法时,JVM是通过什么方式,能正确的找到动态库中C/C++实现的那个native函数呢?JVM转载 2017-06-08 22:42:35 · 433 阅读 · 0 评论 -
JNI/NDK开发指南(三)——JNI数据类型及与Java数据类型的映射关系
当我们在调用一个Java native方法的时候,方法中的参数是如何传递给C/C++本地函数中的呢?Java方法中的参数与C/C++函数中的参数,它们之间是怎么转换的呢?我猜你应该也有相关的疑虑吧,咱们先来看一个例子,还是以HelloWorld为例:HelloWorld.java:package com.study.jnilearn;class MyClass {}public c转载 2017-06-08 22:44:04 · 360 阅读 · 0 评论 -
JNI/NDK开发指南(四)——字符串处理
从第三章中可以看出JNI中的基本类型和Java中的基本类型都是一一对应的,接下来先看一下JNI的基本类型定义:typedef unsigned char jboolean;typedef unsigned short jchar;typedef short jshort;typedef float jfloat;typedef double转载 2017-06-08 22:44:53 · 290 阅读 · 0 评论 -
NI/NDK开发指南(五)——访问数组(基本类型数组与对象数组)
JNI中的数组分为基本类型数组和对象数组,它们的处理方式是不一样的,基本类型数组中的所有元素都是JNI的基本数据类型,可以直接访问。而对象数组中的所有元素是一个类的实例或其它数组的引用,和字符串操作一样,不能直接访问Java传递给JNI层的数组,必须选择合适的JNI函数来访问和设置Java层的数组对象。阅读此文假设你已经了解了JNI与Java数据类型的映射关系,如果还不了解的童鞋,请移步《JNI/转载 2017-06-08 22:46:29 · 324 阅读 · 0 评论 -
JNI/NDK开发指南(八)——调用构造方法和父类实例方法
在第6章我们学习到了在Native层如何调用Java静态方法和实例方法,其中调用实例方法的示例代码中也提到了调用构造函数来实始化一个对象,但没有详细介绍,一带而过了。还没有阅读过的同学请移步《JNI/NDK开发指南(六)——C/C++访问Java实例方法和静态方法》阅读。这章详细来介绍下初始一个对象的两种方式,以及如何调用子类对象重写的父类实例方法。我们先回过一下,在Java中实例化一个对象和转载 2017-06-08 22:49:14 · 271 阅读 · 0 评论 -
NI/NDK开发指南(十)——JNI局部引用、全局引用和弱全局引用
篇文章比较偏理论,详细介绍了在编写本地代码时三种引用的使用场景和注意事项。可能看起来有点枯燥,但引用是在JNI中最容易出错的一个点,如果使用不当,容易使程序造成内存溢出,程序崩溃等现象。所以讲得比较细,有些地方看起来可能比较啰嗦,还请轻啪!《Android JNI局部引用表溢出:local reference table overflow (max=512)》这篇文章是一个JNI引用使用不当造成引转载 2017-06-08 22:52:42 · 448 阅读 · 0 评论 -
Android JNI局部引用表溢出:local reference table overflow (max=512)
在《JNI/NDK开发指南(十)——JNI局部引用、全局引用和弱全局引用》这篇文章中详细介绍了在JNI中三种引用的使用方式,区别、应用场景和开发注意事项。由于都是理论,看完之后可能印象不够深刻,由其是在开发当中容易出错的地方。所以这篇文章用一个例子说明引用使用不当会造成的问题,以引起大家对这个知识点的重视。首先创建一个Android工程,在主界面放一个文本框和一个按钮,文本框用于接收创建局部引转载 2017-06-08 22:54:20 · 306 阅读 · 0 评论 -
JNI/NDK开发指南(十一)——JNI异常处理
异常简介异常,显而意见就是程序在运行期间没有按照正常的程序逻辑执行,在执行过程当中出现了某种错误,导致程序崩溃。在Java中异常分为运行时异常(RuntimeException)和编译时异常,在程序中有可能运行期间发生异常的逻辑我们会用try…catch…来处理,如果没有处理的话,在运行期间发生异常就会导致程序奔溃。而编译时异常是在编译期间就必须处理的。本章主要介绍运行时异常。示例1:转载 2017-06-08 22:55:21 · 374 阅读 · 0 评论 -
JNI/NDK开发指南(一)—— JNI开发流程及HelloWorld
JNI全称是Java Native Interface(Java本地接口)单词首字母的缩写,本地接口就是指用C和C++开发的接口。由于JNI是JVM规范中的一部份,因此可以将我们写的JNI程序在任何实现了JNI规范的Java虚拟机中运行。同时,这个特性使我们可以复用以前用C/C++写的大量代码。开发JNI程序会受到系统环境的限制,因为用C/C++语言写出来的代码或模块,编译过程当中要依赖当前操转载 2017-06-08 22:41:16 · 302 阅读 · 0 评论 -
Android 5.x SEAndroid/SElinux内核节点的读写权限
Android 5.0下,因为采取了SEAndroid/SElinux的安全机制,即使拥有root权限,或者对某内核节点设置为777的权限,仍然无法在JNI层访问。本文将以用户自定义的内核节点/dev/wf_bt为例,手把手教会读者如何在JNI层获得对该节点的访问权限。第一步:找到需要访问该内核节点的进程(process),笔者自己这个节点由system_server进程来访问转载 2017-05-21 09:06:55 · 363 阅读 · 0 评论 -
Android用surface直接显示yuv数据(二)
上一篇文章主要是参照AwesomePlayer直接用SoftwareRenderer类来显示yuv,为了能用到这个类,不惜依赖了libstagefright、libstagefright_color_conversion等动态静态库,从而造成程序具有很高的耦合度,也不便于我们理解yuv数据直接显示的深层次原因。 于是我开始研究SoftwareRenderer的具体实现,我们来提取Soft转载 2017-05-21 09:03:54 · 862 阅读 · 1 评论 -
Android.mk-1
在Android开发的时候,经常会使用到用c或c++编写的第三方的静态库。如果有源码的话,可以直接跟你自己的代码一去编译成动态库so,但是如果没有源码的话,你就必须在自己的动态库so里面将别人生成好的静态库导入进来一起编译了。我在编译的时候遇到了不少问题,我觉得有必要进行总结一下。下面我以一个简单的实际例子来讲解如何在动态库中导入静态库。静态库中的源代码有两个文件:static.h转载 2017-01-16 21:14:55 · 231 阅读 · 0 评论 -
Android(3)
LOCAL_LDLIBS :链接的库不产生依赖关系,一般用于不需要重新编译的库,如库不存在,则会报错找不到。且貌似只能链接那些存在于系统目录下本模块需要连接的库。如果某一个库既有动态库又有静态库,那么在默认情况下是链接的动态库而非静态库。如:LOCAL_LDLIBS += -lm –lz –lc -lcutils –lutils –llog …如果你的Android.mk文件中只有转载 2017-01-16 21:16:13 · 276 阅读 · 0 评论 -
Android.mk(4)
Android.mk结构多目录Android.mk包含语句设置头文件搜索路径设置需要链接的动态库导出模块头文件路径导出模块依赖关系预编译实例Android.mk规则在NDK中有文档ANDROID-MK说明,我觉得了解了基本规则的人都要去看一下,以便灵活运用.1.Android.mk结构:LOCAL_PATH:=$(call my-dir)转载 2017-01-16 21:23:12 · 234 阅读 · 0 评论 -
如何打出Android程序调用stack trace
找出程序的调用堆栈 trace 可以知道是谁调用了这个接口,也能快速学习程序的调用流程,非常实用。但需要注意的是,不能在正式代码中使用,只能用于调试,这个非常耗资源也会造成 log 泛滥。下面就介绍如何在 Android Java/C++/C 程序当中打印出程序调用 trace,如果需要在其他环境中使用的话 C++/C 部分需要移植 corkscrew 库。Java非常简单,创建一个转载 2017-01-27 13:51:46 · 2569 阅读 · 0 评论 -
android下camera数据流的分析
android下camera数据流的分析 2013-03-23 10:12:56分类: Android平台原文地址:android下camera数据流的分析 作者:huabinbin00Camera应用部分:Packages/apps/camera/src/com/android/camera/camera.javaCamera本地框架:frameworks转载 2017-03-07 15:58:19 · 401 阅读 · 0 评论 -
android的binder机制
(一) 概述 android的binder机制提供一种进程间通信的方法,使不同一个进程可以以类似远程过程调用的形式调用另一个进程所提供的功能。binder机制在Java环境和C/C++环境都有提供。 android的代码中,与C/C++的binder包括一些类型和接口的定义和实现,相关的代码在下面这几个文件中: frameworks\ba转载 2017-05-11 20:26:21 · 342 阅读 · 0 评论 -
Android Camera AP到Camera Hal调用流程
1. 首先是调用framework层的Camera.java(frameworks\base\core\java\Android\hardware)的takePicture方法 2. 接着会调用到JNI层的android_hardware_Camera.cpp(frameworks\base\core\jni)的android_hardware_Camera_takeP转载 2017-05-12 11:41:34 · 577 阅读 · 0 评论 -
Android系统启动:init进程与init语言
今天是农历正月初一,一切又是全新的开始。面向新的一年,我们可能启动了许多有意义的计划,在这个有着特殊意义的日子里,让我们来一起学习一下Android系统是如何启动的。init进程与init.rcinit进程是一切的开始,在Android系统中,所有进程的进程号都是不确定的,唯独init进程的进程号一定是1。因为这个进程是系统起来的第一个进程。并且,init进程掌控了整个系统的启动流程。转载 2017-05-12 14:40:34 · 464 阅读 · 0 评论 -
Android源码编译第三方app(Android studio编写项目)如何写Android.mk
在Android源码开发过程中,需要整合进第三方APP到系统中,作为内置应用。如果是第三方APP是以APK形式整合进项目中,那么根据平台和公司的要求,只需修改编译脚本就可以实现整合,这里不再赘述;本文讲解拿到的第三方app是源码,需要自己写android.mk文件实现编译apk功能。 现在Android app ide主要是两个工具eclipse和android studio。Ec转载 2017-05-28 10:17:50 · 7780 阅读 · 0 评论 -
怎样在64位安卓系统中使用32位SO库
背景知识:对于64位系统的编译规则,可参考:http://source.android.com/source/64-bit-builds.html关键点:JAVA编译不分32bit和64bit(APK,JAR)可执行文件,默认编译64位动态库和静态库,默认同时编译32bit和64bit版本通过LOCAL_MULTILIB可以指定特定模块编译32bit或64bit或都编译JAVA加载JNI库转载 2017-05-29 09:44:08 · 3714 阅读 · 0 评论 -
怎样在64位安卓系统中使用32位SO库 2
之前跟的项目, 那些号称64位 CPU的主控, 跑的软件全是 32位的; 我仍然很清楚的记得, 当年 CEO 在给大家讲解财报,描述技术蓝图的时候, 宣称 64bit 软件的运行效率其实远不如预期, 因为所有的代码要备两份存储, 代码可能要两次加载过程, cache 利用率不高,软件修改量却很大... 好吧, 以这位 CEO 后来所表现出来的 RP, 他的话应该是一个字也不能信的, 我们所知转载 2017-05-30 00:23:21 · 3236 阅读 · 0 评论 -
Android用surface直接显示yuv数据(三)
package com.example.myyuvviewer; import java.io.File; import java.io.FileInputStream; import android.app.Activity; import android.os.Bundle; import android.os.Environment; import android.util.转载 2017-05-21 09:01:25 · 989 阅读 · 0 评论 -
Android用surface直接显示yuv数据(一)
研究了一段时间Android的surface系统,一直执着地认为所有在surface或者屏幕上显示的画面,必须要转换成RGB才能显示,yuv数据也要通过颜色空间转换成RGB才能显示。可最近在研究stagefright视频显示时发现,根本找不到omx解码后的yuv是怎么转换成RGB的代码,yuv数据在render之后就找不到去向了,可画面确确实实的显示出来了,这从此颠覆了yuv必须要转换成RGB才能转载 2017-05-21 09:02:23 · 2402 阅读 · 0 评论 -
gerrit
http://www.cnblogs.com/eastnapoleon/p/6595952.html转载 2017-09-27 23:46:58 · 407 阅读 · 0 评论