ndk开发
goldxclub
QQ: 304826529
展开
-
OpenSSL简介及在Windows、Linux、Mac系统上的编译步骤
OpenSSL介绍:OpenSSL是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。SSL是SecureSockets Layer(安全套接层协议)的缩写,可以在Internet上提供秘密性传输。其目标是保证两个应用间通信的保密性和可靠性,可在服务器端和用户端同时实现支持。已经成为Internet上保密通转载 2016-10-19 18:13:20 · 342 阅读 · 0 评论 -
Linux下利用backtrace追踪函数调用堆栈以及定位段错误
一般察看函数运行时堆栈的方法是使用GDB(bt命令)之类的外部调试器,但是,有些时候为了分析程序的BUG,(主要针对长时间运行程序的分析),在程序出错时打印出函数的调用堆栈是非常有用的。在glibc头文件"execinfo.h"中声明了三个函数用于获取当前线程的函数调用堆栈。int backtrace(void **buffer,int size) 该函数用于转载 2016-09-19 18:58:21 · 230 阅读 · 0 评论 -
Android性能优化之过渡绘制(一)
博客有一段时间没有更新了,到了新公司后,一直比较忙,博客也更新地不那么频繁了,倒是利用这个VPS搭建的VPN每天都在用,速度也蛮不错的。最近一直在看Android上和性能相关的部分,也就是所谓的Android性能优化,才发现Android性能这一块,自己懂得还是太少了,所以从上层开始看,也算是一点一点入门吧。这个系列将讲解学习过程中总结的和性能相关的内容。首先将讲解一下GPU过渡绘制,也是转载 2016-09-19 18:33:51 · 379 阅读 · 0 评论 -
Android性能优化之Systrace工具介绍(一)
本文是Android性能优化工具系列的第一篇,这个系列主要介绍Android性能优化过程中会使用到的一些工具,以及如何用这些工具来发现问题和解决问题。在性能优化方面,Android有不少性能工具供大家来使用,按照我们一贯地 “发现问题-解决问题”的思路来看,发现问题才是最主要的,一上来就想着如何去解决问题,反而会事倍功半。这一篇先来简单介绍一下Systrace这个工具。Systra转载 2016-09-19 18:32:45 · 1768 阅读 · 0 评论 -
ubuntu 14.10 编译 android 4.4kitkat
由于在windows下开发luncher比较麻烦,决定转到在linux下开发,自己编译源码。以下是安装过程中遇到的问题,需要一一解决:干脆把下面的环境都安装:git gnupg flex bison gperf build-essential zip curl libc6-dev x11proto-core-dev g++-multilib转载 2016-09-18 10:46:15 · 531 阅读 · 0 评论 -
base operand of '->' has non-pointer type 'JNIEnv {aka _JNIEnv}'和Method 'GetStringUTFChars' could no
Android NDK带的jni例子都是使用C定义JNI接口,但是在项目中,因为Native代码是用C++编写的,所以我就使用C++定义JNI接口,但是初学者总会遇到很多问题:jni中的常见问题:1、base operand of '->' has non-pointer type 'JNIEnv {aka _JNIEnv}'和Method 'GetStringUT转载 2016-09-14 17:40:39 · 975 阅读 · 0 评论 -
Android源码的编译(4.4.2)
1. 将android源码中下的所有文件,文件夹都加上可执行的权限,因为在编译过程中,你会遇到Permission Denied的错误,这是因为有些可执行文件在运行过程中需要可执行的权限,可是,我怎么知道哪些文件需要什么权限呢,干脆一不做,二不休,我就把android源码目录下的所有文件都加上可执行的权限,那么后续就满血复活啦,只要敲击以下命令即可: sudo chmod -R转载 2016-09-14 16:52:42 · 387 阅读 · 0 评论 -
解决Ubuntu 安装vim 的Package vim has no installation candidate问题,100%有效
当输入sudo apt-get install vim-gtk时出现了下面问题:nigel@yq-ubuntu:~/worksp$ sudo apt-get install vim-gtkReading package lists... DoneBuilding dependency tree Reading state information... DonePa转载 2016-09-13 15:10:16 · 1064 阅读 · 0 评论 -
Linux下的OpenSSL编程
[cpp] view plain copy print?http://www.linuxidc.com/Linux/2011-04/34523.htm 1.安装openssl库: sudo sudo apt-get install libssl-dev 2.服务器端实现代码 [cpp] view plain转载 2016-09-02 19:49:52 · 317 阅读 · 0 评论 -
backtrace 和 backtrace_symbols 打印函数调用关系
backtrace.c点击(此处)折叠或打开#include stdio.h>#include stdlib.h>#include execinfo.h>#define MAX_LEVEL 4void test2(){// printf("func:%s,line:%d\n",__FUNCTI转载 2016-09-20 10:54:31 · 401 阅读 · 0 评论 -
关于Android上对so进行函数的hook的完整原理解析,最新测试通过
http://pan.baidu.com/s/1boiw3iJ 共享出来源码吧,里面有远程注入(inject)和下面方法2的源码以及使用libsbustrate的方式,修改got表的百度就知道方法了,源码一大堆,只需要清楚修改got表到底做了什么。 网上关于hook的文章很多,开源代码也很多,但是真心没找到一个可以用(不是说写的人有问题,而是代码都很久了,并转载 2016-09-07 18:05:33 · 6903 阅读 · 3 评论 -
Android下面打印进程函数调用堆栈(dump backtrace)的方法
1. 为什么要打印函数调用堆栈?打印调用堆栈可以直接把问题发生时的函数调用关系打出来,非常有利于理解函数调用关系。比如函数A可能被B/C/D调用,如果只看代码,B/C/D谁调用A都有可能,如果打印出调用堆栈,直接就把谁调的打出来了。不仅如此,打印函数调用堆栈还有另一个好处。在Android代码里,函数命名很多雷同的,虚函数调用,几个类里的函数名相同等,即使用sour转载 2016-09-21 15:25:17 · 621 阅读 · 0 评论 -
在linux下把.so文件反汇编
如果是arm架构的可以这样。arm-linux-objdump -d libxxx.so > libxxx.S其中arm-Linux-objdump换成相应的工具前缀就行。Android的编译器都存在 prebuild目录下,prebuilt\linux-x86\toolchain\arm-eabi-4.4.3\arm-eabi\bin转载 2016-10-18 16:53:33 · 9554 阅读 · 0 评论 -
如何打出Android程序调用stack trace
找出程序的调用堆栈 trace 可以知道是谁调用了这个接口,也能快速学习程序的调用流程,非常实用。但需要注意的是,不能在正式代码中使用,只能用于调试,这个非常耗资源也会造成 log 泛滥。下面就介绍如何在 Android Java/C++/C 程序当中打印出程序调用 trace,如果需要在其他环境中使用的话 C++/C 部分需要移植 corkscrew 库。Java非常简单,创建一个 T转载 2016-09-28 20:57:34 · 254 阅读 · 0 评论 -
JNI中如何打印Call Stack
NDK里面好像没有专门打印Call Stack的函数,正好又要用到这个功能,Google了一翻,可以用stack unwind相关的API实现。关于什么是stack unwind的解释如下:http://www.ibm.com/support/knowledgecenter/SSAE4W_9.0.0/com.ibm.xlcpp111.aix.doc/language_ref转载 2016-09-28 18:24:13 · 492 阅读 · 0 评论 -
JNI官方规范中文版——如何使用JNI中的global reference和local reference
JNI提供了一些实例和数组类型(jobject、jclass、jstring、jarray等)作为不透明的引用供本地代码使用。本地代码永远不会直接操作引用指向的VM内部的数据内容。要进行这些操作,必须通过使用JNI操作一个不引用来间接操作数据内容。因为只操作引用,你不必担心特定JVM中对象的存储方式等信息。这样的话,你有必要了解一下JNI中的几种不同的引用:1、 JNI支持三种引用:局部引转载 2016-09-26 19:05:12 · 723 阅读 · 0 评论 -
JNI官方规范中文版——如何访问Java中的字段和方法
现在,你知道了如何通过JNI来访问JVM中的基本类型数据和字符串、数组这样的引用类型数据,下一步就是学习怎么样和JVM中任意对象的字段和方法进行交互。比如从本地代码中调用JAVA中的方法,也就是通常说的来自本地方法中的callbacks(回调)。我们从进行字段访问和方法回调时需要的JNI函数开始讲解。本章的稍后部分我们会讨论怎么样通过一些cache(缓存)技术来优化这些操作。在最后,我们还转载 2016-09-26 19:04:23 · 361 阅读 · 0 评论 -
SSL协议握手过程报文解析
仅供学习使用,转载来源http://www.cnblogs.com/piyeyong/archive/2010/07/02/1770208.htmlSSL建立握手连接目的:1.身份的验证,client与server确认对方是它相连接的,而不是第三方冒充的,通过证书实现2.client与server交换session key,用于连接后数据的传输加密和hash校验转载 2016-10-11 20:26:56 · 1403 阅读 · 0 评论 -
SSL原理及应用(1)SSL协议体系结构
SSL(Secure Sockets Layer ,安全套接层),是为网络通信提供安全及数据完整性的一种安全协议。由Netscape研发,用以保障在Internet上数据传输的安全,利用数据加密(Encryption)技术,确保数据在网络上的传输过程中不会被截取及窃听。当前几乎所有浏览器都支持SSL,但是支持的版本有所不同。从图8-1中可以看到,IE同时支持SSL 2.0和SSL 3.0两个版转载 2016-10-11 18:47:55 · 2460 阅读 · 0 评论 -
Android下打印调试堆栈方法
打印堆栈是调试的常用方法,一般在系统异常时,我们可以将异常情况下的堆栈打印出来,这样十分方便错误查找。实际上还有另外一个非常有用的功能:分析代码的行为。android代码太过庞大复杂了,完全的静态分析经常是无从下手,因此通过打印堆栈的动态分析也十分必要。Android打印堆栈的方法,简单归类一下 1. zygote的堆栈dump实际上这个可以同时dump jav转载 2016-09-21 15:31:29 · 274 阅读 · 0 评论 -
理解WebKit和Chromium: 调试Android系统上的Chromium
1. Android上的调试技术在Android系统上,开发者可以使用两种不同的语言来开发应用程序,一种是Java语言,开发者使用的是Android SDK来配置和编译这些代码,生成Java语言的class文件,也就是Java虚拟机运行的二进制代码。Android系统使用.dex文件将一系列的class文件压缩在一起。另外一种是C/C++语言,使用Android NDK来配置和编译这些代码转载 2016-09-02 17:19:16 · 406 阅读 · 0 评论 -
Linux查看程序、进程的依赖库的方法
1. 利用ldd查看可执行程序的依赖库[root@~]# ldd /usr/local/php/bin/php linux-vdso.so.1 => (0x00007fff753f5000) libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00000031f4600000) librt.so.1 => /lib64/librt.so.转载 2016-09-02 17:00:23 · 6909 阅读 · 0 评论 -
JNI/NDK开发指南(十一)——JNI异常处理
转载请注明出处:http://blog.csdn.net/xyang81/article/details/45770551异常简介异常,显而意见就是程序在运行期间没有按照正常的程序逻辑执行,在执行过程当中出现了某种错误,导致程序崩溃。在Java中异常分为运行时异常(RuntimeException)和编译时异常,在程序中有可能运行期间发生异常的逻辑我们会用try…catch…来处理转载 2016-09-14 11:48:08 · 219 阅读 · 0 评论 -
工作积累之NDK编译STL
方法:1.在jni目录下新建Application.mk; 加入 APP_STL := stlport_static 右边的值还可以换成下面几个:system - 使用默认最小的C++运行库,这样生成的应用体积小,内存占用小,但部分功能将无法支持stlport_static - 使用STLport作为静态库,这项是Android开发网极力推荐的stlport_s转载 2016-08-22 12:18:20 · 224 阅读 · 0 评论 -
在 Android 系统中直接调用 SO文件(包含System.loadLibrary加载so的路径解释)
Android虚拟机不能直接调用底层设备,如果要对底层设备进行调用,就需要用到so使用 C语言或C++编写完成,利用NDK进行编译,直接运行在Linux内核中,按jni调用 so时,基本类型可以直接交互。 在 apk里打包进.so文件的方法有两种,一 是在 Android.mk文件里增加“LOCAL_JNI_SHARED_LIBRARIES := libxxx”,这样在编译的时候转载 2016-09-12 16:01:56 · 11256 阅读 · 1 评论 -
JNI log来代替printf打印调试
Printf属于linux应用的打印机制,在androd系统当中没有对应的输出机制,只有在终端下执行时才能回显出来。LOGE属于android专门定义的机制Android logger,专门打印除kernel外的所有应用的log输出。 Android NDK 开发时,想要在 .c 文件中打印一些调试信息的话,是不能使用 printf() 方法的,NDK 根本不支持转载 2016-08-31 18:50:44 · 357 阅读 · 0 评论 -
Use printf in Android JNI
Problem: Android can debug by logcat. So Android JNI need it to debug. This method let JNI code can print something we need in logcat. 1. Define LOG in c fileAdd the fol转载 2016-08-31 18:38:37 · 325 阅读 · 0 评论 -
Android NDK开发Crash错误定位
转自:http://blog.csdn.net/xyang81/article/details/42319789 在Android开发中,程序Crash分三种情况:未捕获的异常、ANR(Application Not Responding)和闪退(NDK引发错误)。其中未捕获的异常根据logcat打印的堆栈信息很容易定位错误。ANR错误也好查,Android规定,应用与用户进行转载 2016-09-12 10:00:52 · 315 阅读 · 0 评论 -
JNI与Android VM之间的关系
1. 如何载入*.so文件由于Android的应用层级类别都是以Java撰写的,这些Java类别转译为Dex型式的Bytecode之后,必须仰赖Dalvik虚拟机(VM: Virtual Machine)来执行。另外,当java需要调用c native组件时,VM就会去加载本地的c组件,让java函数能顺利的调用到C函数。此时,VM扮演着桥梁的角色,让java和c组件能通过透明的J转载 2016-08-31 11:24:53 · 470 阅读 · 0 评论 -
Android NDK调试出错Unknown Application ABI, Unable to detect application ABI's的解决方案
今天在调试Android NDK的时候,ADT的控制台报了这个错误: Unknown Application ABI, Unable to detect application ABI's 在网上查了好久,终于找到了解决方案: 在工程的jni文件夹下面新建一个Makefile类型的文件,文件名为Application。(注:如果你不转载 2016-08-30 19:11:47 · 785 阅读 · 0 评论 -
eclipse NDK开发中找不到头文件解决方法
网上收集,试过有效,特记录于此eclipse做NDK开发时包含jni头文件时有黄色小箭头表示的含义是:jni.h和其他系统头文件找不到的问题,解决方法是初始化eclipse对该project的native support1. 在eclipse中关闭指定Project2. 用其他编辑工具打开该project的.project文件,删除以下内容:......转载 2016-08-30 18:04:30 · 1403 阅读 · 0 评论 -
JNI学习之Invocation API
ttp://docs.oracle.com/javase/8/docs/technotes/guides/jni/spec/invocation.html的学习笔记,限于英文水平和对JNI的理解,可能存在错误。简介通过使用Invocation API,使用C/C++开发的本地应用可以访问Java虚拟机提供的特性。为了描述简单,下面提到的VM指的都是Java虚拟机。创建VM转载 2016-08-22 12:25:03 · 462 阅读 · 0 评论 -
不能安装vm tools ,虚拟机打开了,一直是灰色的
我的虚拟机打开了,vmware tools 也一直是灰色的,网上的那些点击VMware tools安装的方法都用不了了,网上找了n久,折腾了大半天,终于安装成功了。虽然vmware tools 是灰色的,但是虚拟机的下载包里面有linux.iso,这个就是我需要的。我要安装在linux上面,步骤如下:1. 挂载镜像文件,虚拟机->设置->硬件->CD/DVD.右边“连接”下面选择“使用IOS转载 2016-09-12 20:38:21 · 14079 阅读 · 3 评论 -
dlopen、dlsym和dlclose的使用和举例
dlopen、dlsym和dlclose的使用和举例 之前用过这三个函数一直没时间整理一下。今天抽时间整理一下。1、函数简介dlopen基本定义功能:打开一个动态链接库 包含头文件: #include 函数定义: void * dlopen( const char * pathname, int mode ); 函转载 2016-09-01 11:51:07 · 706 阅读 · 0 评论 -
NDK 异常检测与抛出
1.定位so库中的异常http://www.csdn.net/article/2014-12-30/2823366-Locate-Android-NDKAndroid2.在代码中捕获异常NDK 是native 编程的开发环境,使用的是C或C++语言,在这个过程中,更多的是使用c与c++的混编,因为在计算机底层,c提供了丰富的函数库,所以即使使用C++,也需要不可避免的进行c转载 2016-09-14 11:35:11 · 638 阅读 · 0 评论 -
Android.mk解析
1. Android.mk示例LOCAL_PATH := $(call my-dir) #指定当前目录 include $(CLEAR_VARS) #清除一些变量的值,但是LOCAL_PATH除外LOCAL_MODULE_TAGS := optional #编译选项便是在何种情况下编译 LOCAL_SRC_转载 2016-09-13 19:13:26 · 271 阅读 · 0 评论 -
如何定位Android NDK开发中遇到的错误
Android NDK 是在SDK前面又加上了“原生”二字,即Native Development Kit,因此又被Google称为“NDK”。众所周知,Android程序运行在Dalvik虚拟机中,NDK允许用户使用类似C / C++之类的原生代码语言执行部分程序。NDK包括了:从C / C++生成原生代码库所需要的工具和build files。将一致的原生库嵌入可以在Android转载 2016-09-01 18:48:29 · 437 阅读 · 0 评论 -
Android下的挂钩(hook)和代码注入(inject)
Android是基于linux内核的操作系统,根据语言环境可以简单的划分为java层、native C层、linux内核层。java层通过jni与native层交互,使用linux提供的底层函数功能。因此,类似linux系统,我们可以在Android下实现对另一个进程的挂钩和代码注入。在这简单介绍下挂钩和代码注入的方法和两个库,以及针对《刀塔传奇》实现的代码注入。利用libinje转载 2016-09-01 17:12:45 · 1831 阅读 · 0 评论 -
Linux中mprotect()函数的用法
在Linux中,mprotect()函数可以用来修改一段指定内存区域的保护属性。函数原型如下:#include #include int mprotect(const void *start, size_t len, int prot); mprotect()函数把自start开始的、长度为len的内存区的保护属性修改为prot指定的值。prot转载 2016-08-22 20:11:43 · 924 阅读 · 0 评论 -
Linux下的C编程实战
C编程实战(一)――开发平台搭建1.引言 Linux操作系统在服务器领域的应用和普及已经有较长的历史,这源于它的开源特点以及其超越Windows的安全性和稳定性。而近年来,Linux操作系统在嵌入式系统领域的延伸也可谓是如日中天,许多版本的嵌入式Linux系统被开发出来,如ucLinux、RTLinux、ARM-Linux等等。在嵌入式操作系转载 2016-08-22 20:10:05 · 761 阅读 · 0 评论