android中级知识
{丸の子}
这个作者很懒,什么都没留下…
展开
-
Android windows系统上安装与使用NDK
很早就听说了android的NDK应用,只是一直没有时间去研究,今天花了点时间在windows平台搭建了NDK环境,并成功运行了第一个简单的android应用。一:什么是NDK?NDK 提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者的帮助是巨大的。NDK 集成了交叉编译器,并提供了相应的mk 文件隔离CP...原创 2011-09-07 14:03:14 · 107 阅读 · 0 评论 -
Android NDK编程入门笔记
[color=darkred]为何要用到NDK?[/color]前段时间,工作中需要用android的应用程序访问android的根文件系统中的文件,但是由于应用程序的权限限制,无法访问这些文件,怎么办? 所以这就要用到了NDK编程了,既用C/C++代码实现访问系统文件,并将其生成本地库,供android中的java代码调用,这样就可以在java代码中通过调用C/C++编写的库的接口来实现对系...原创 2011-09-07 14:38:35 · 116 阅读 · 0 评论 -
制作Android ROM的步骤
制作Android ROM有两种方法:[list][*]编译Android源代码的方法,这个比较复杂,以后再介绍;[*]在已有的ROM基础上制作或者叫定制自己的ROM。[/list]本文介绍的是在已有ROM基础上的定制步骤。我这里使用的机器是Nexus One,于是下载了第三方的ROM,这里以安卓农夫ROM 2.4为基础。当然也可以用CyanogenMod提供的...原创 2011-09-07 15:52:50 · 135 阅读 · 0 评论 -
Android NDK 的学习之旅 - 资源释放
JNI 编程实现了 native code 和 Java 程序的交互,因此 JNI 代码编程既遵循 native code 编程语言的编程规则,同时也遵守 JNI 编程的文档规范。在内存管理方面,native code 编程语言本身的内存管理机制依然要遵循,同时也要考虑 JNI 编程的内存管理。本章简单概括 JNI 编程中显而易见的内存泄漏。从 native code 编程语言自身的内存管理,...2011-09-19 11:59:58 · 90 阅读 · 0 评论 -
Android NDK 的学习之旅 - 数据传输
[size=x-small][b]1、主要流程[/b][/size]1、 String 字符串传输[list][*]a) 上层定义一个native的方法,需要一个String 参数 ,返回一个String[*]b) JNI对应上层的方法,打印出上层传输下来的String数据,并返回处理String数据[*]c) 上层 收到 native 方法 返回的 值,在UI中显示出...2011-09-19 12:15:01 · 56 阅读 · 0 评论 -
Android 调试运行launcher源码(一)——获取launcher源码
关于Launcher源码我就不做介绍了,如果大家不知道Launcher是什么那先去百度一下! 如何得到Launcher源码? 一、下载android源码,从android源码中提取Launcher源码。 网上有很多下载的教程,自己找。也可以去android源码网站上只下载Launcher一部分。 如果下载的是整个源码,可以在源码的\packages\...原创 2011-10-25 08:44:13 · 168 阅读 · 0 评论 -
Android 调试运行launcher源码(二)——向Eclipse中导入Launcher源码
有了Launcher2.2源码后我们就要把他导入到Eclipse中。 注意:我调试Launcher源码是在windows环境下,不是Linux。 具体导入步骤如下: 一、打开Eclipse,新建android工程,具体操作如下图: [img]http://dl.iteye.com/upload/attachment/575458/4e7b0193-1d93-3172...原创 2011-10-25 08:44:25 · 99 阅读 · 0 评论 -
Android 调试运行launcher源码(三)——修改工程的包名
我们接上前面的内容,修改android Launcher 2.2源码工程的包名。如果你不修改包名是运行不起来的,因为它和系统自带的冲突了,这儿要修改包名必须要用Eclipse自带的重命名,不然会引起很多包的错误。步骤如下: 一、选择包,如下图:[img]http://dl.iteye.com/upload/attachment/575466/78d1106e-9ef6-3293-b6b8-...原创 2011-10-25 08:44:37 · 216 阅读 · 0 评论 -
Android 调试运行launcher源码(四)——修改所有类中的错误
上一篇文章是修改了工程的包名,修改之后还是出现了很多的问题。 是不是被这些错误吓到了? 是不是怀疑Launcher到底能不能在windows下的Eclipse中运行? 那就在这篇和下一篇文章中见证奇迹的发生吧。 下面就一个类一个类的修改吧,按包里面的顺序。 1、文件:AllAppsGridView.Java 错误:[img]http://dl.iteye.com/upl...原创 2011-10-25 08:56:02 · 93 阅读 · 0 评论 -
Android 调试运行launcher源码(五)——运行自己修改的Launcher
上次修改完了是不是还不能运行?再修改一个地方就可以了: 找到配置文件:AndroidManifest.xml 这个文件没错,但你要是不修改这个文件你就运行不起来。先看位置:[img]http://dl.iteye.com/upload/attachment/575757/a1d7f531-3cc8-306e-a6e3-1db366127714.png[/img]将其中的[i...原创 2011-10-25 08:59:14 · 159 阅读 · 0 评论 -
Android开发之JNI层crash分析工具arm-eabi-addr2line
android_ndk/build/prebuilt/linux-x86/arm-eabi-4.2.1/bin/arm-eabi-addr2line -f -e xxx.so 地址(0000abcd)即可找出该地址对应文件的行数。原创 2012-01-10 09:11:57 · 68 阅读 · 0 评论 -
Android Dalvik虚拟机初识
首先,让我们来思考下面几个问题:什么是Dalvik虚拟机?Dalvik VM与JVM有什么区别?Dalvik VM有什么新的特点?Dalvik VM的架构是怎么样的?首先,我得承认第一个问题问得很傻:什么是Dalvik虚拟机?没有人给出过一个明确的定义,但是,我们似乎可以从人们对Java虚拟机的描述中得到些信息。Java 虚拟机(JVM)是一个虚构出...原创 2012-02-10 09:37:00 · 74 阅读 · 0 评论 -
NDK 详细解析C语言中的sizeof
[b]一、sizeof的概念[/b] sizeof是C语言的一种单目操作符,如C语言的其他操作符++、--等。它并不是函数。[b]sizeof操作符以字节形式给出了其操作数的存储大小。[/b]操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。[b]二、sizeof的使用方法[/b] 1、用于数据类型 sizeof使用形式:sizeo...原创 2012-02-17 10:24:14 · 123 阅读 · 0 评论 -
NDK C中malloc的使用
malloc函数 原型:extern void *malloc(unsigned int num_bytes);用法:#include 功能:分配长度为num_bytes字节的内存块说明:如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。举例:[code="java"]// malloc.c#i...原创 2012-02-17 10:30:07 · 276 阅读 · 0 评论 -
android 如何防止代码被反编译
作为Android应用开发者,不得不面对一个尴尬的局面,就是自己辛辛苦苦开发的应用可以被别人很轻易的就反编译出来。Google似乎也发现了这个问题,从SDK2.3开始我们可以看到在android-sdk-windows\tools\下面多了一个proguard文件夹proguard是一个java代码混淆的工具,通过proguard,别人即使反编译你的apk包,也只会看到一些让人很难看懂的代...原创 2012-07-07 09:31:34 · 70 阅读 · 0 评论 -
Ubuntu下android源码下载与编译
用虚拟机来创建一个Ubuntu环境,在这里虚拟机用的是VMware,Ubuntu选择的是10.04版本,Android下载的是4.0.3编译时要确保系统的内存在1.2GM以上,且有足够的硬盘可用空间,否则会编译失败终止。Android官方提示: Note: It is also possible to build Android in a virtual machine. If you are...原创 2012-04-18 13:11:02 · 81 阅读 · 0 评论 -
无需cygwin,使用NDK进行开发
NDK从7开始自带编译器,在windows上无需配置cygwin的环境。在eclips中配置NDK路径在eclipse中点击菜单栏window-Perferences,配置NDK的路径。[img]http://dl2.iteye.com/upload/attachment/0088/5207/60d81edf-c57e-3fc1-8ed4-5cedfb7ace91.jpg[/i...原创 2013-08-22 14:09:48 · 73 阅读 · 0 评论 -
ndk-build 出现undefined reference to `__android_log_write'错误
__android_log_write(ANDROID_LOG_INFO,"MyNdkDemo", "class Point not found");.c文件中存在此句代码,当使用ndk-build是就会出现标题错误。解决: mk文件中缺少了LOCAL_LDLIBS参数。在Android.mk文件里,可以指定一个LOCAL_LDLIBS的参数。如果不指定,那么编译的时候...原创 2013-08-22 16:50:00 · 175 阅读 · 0 评论 -
android ndk extern "C"
C++ 的代码里面:extern "C"{ 。。。}这是因为生成的二进制文件中,C和C++的符号表不相同造成的。Jni是按照C的生成规则去找函数的, 所以要加上extern C使编译器把函数按照C的规则编译 这样才能被JAVA调用...原创 2013-08-22 16:56:18 · 325 阅读 · 0 评论 -
Android智能事件触发器---ApkViewTracer
本文介绍我业余时间开发的一个工具,ApkViewTracer,主要是通过与Android模拟器中View Server通信,可以跟踪并分析模拟器当前Views的状态,可以向指定的某个View发送事件,触发其行为。目前,这个工具主要提供两个功能:1. Intelligent event trigger,在apk运行过程中更拟人地更智能地触发其行为,用于辅助Android Applica...原创 2014-12-22 09:38:49 · 81 阅读 · 0 评论 -
Cydiasubstrate modules 简单编程之Java Hook 心得篇
Cydiasubstrate对于果粉来说一点也不陌生,越狱必备也提供了很多modules供用户个性化使用。当然Cydiasubstrate也推出了Android版。当然Xposed也能实现了对应的功能,但两者实现的技术手段有些不一样,由于Xposed开源,也有不少相关文章分析了实现方式,其主要原理是替换了/system/bin/app_process这个程序,在机子启动时加载自身的XposedBr...原创 2014-12-23 13:47:46 · 116 阅读 · 0 评论 -
360免费WiFi密码查看分享
由于现在智能机的普遍使用,想要连上网而到处搜wifi的人也跟着庞大了起来,但是很多wifi都设置了密码,想要破也不简单。于是为了冒个存在感,360推出了一款能提供免费wifi的软件,它能使你连上已被分享的wifi,360免费WiFi手机版跟WiFi万*能*钥匙一样可以共享(破解)WiFi密码,但是不能查看已共享并保存在手机上的WiFi密码的,想查看破解wifi密码就没门吗?下面就来看看安卓系统怎么...原创 2014-12-23 13:48:18 · 1358 阅读 · 0 评论 -
[转]Android java hook(一)
参考:[url]http://www.cydiasubstrate.com[/url]0x0:前言一直以来想做一下安卓java hook方面的东西,因为一些游戏的测试,如果能做好java hook的话,那么本机测试的话将会非常方便,更主要的是在一些有签名或者md5防护的游戏中,我们可以确定好位置,然后hook相关方法和修改参数,达到测试的效果,能确保找准位置,那么剩下的就寻找游戏的...原创 2014-12-23 13:49:35 · 96 阅读 · 0 评论 -
[转]android java hook(二)
第一篇文章读完之后,大家在熟悉了cydia的hook框架了,然后我们就开始下一步的学习。本篇文章,主要是修改正常软件中方法的返回值,大家可以根据这个思路去延伸扩展,不要局限于此文一个思路。0x1:建立新工程新建立一个正常安卓工程,具体可以看附件工程名:TestHook包名:com.example.testhook主类:MainActivity.java编...原创 2014-12-23 13:50:43 · 87 阅读 · 0 评论 -
android 的skia 图形引擎库
一、简介:skia 有大概 80,000 行代码,基于 C++ 开发,主要特点包括:[list][*]高度优化的软体 ->Optimised software-based rasteriser (module sgl/);[*]选择性透过OpenGL/ES ,加速特定操作,如shader 和 textures -> Optional GL-based acceleration ...原创 2015-01-11 11:42:57 · 372 阅读 · 0 评论 -
无Java开发Android应用(NativeActivity)
无Java开发Android应用(NativeActivity)这里是官方给的例子程序 ,来自:[url]http://developer.android.com/reference/android/app/NativeActivity.html[/url]AndroidManifest.xml[code="xml"] ...原创 2015-07-29 16:24:07 · 319 阅读 · 0 评论 -
如何开发 native-activity 工程
在Android2.3版本里,可以使用native_activity.h接口实现一个完整的native activity,在使用的时候,要确认回调函数不能阻塞主UI线程。更多信息,可以参考/platforms/android-9/arch-arm/usr/include/android/native_activity.h.Native_app_glue静态辅助库为另一个线程中的事件循环提供了回...原创 2015-07-31 08:35:23 · 243 阅读 · 0 评论 -
Android NDK纯C++开发
继续了解使用native_app_glue来编写纯C++的Android NDK开发。下面从一个"最简单“的可运行的程序来了解native_app_glue程序的基本组成。1. 源码main.cpp:[code="c++"]// main.cpp #include /** * This is the main entry point of a n...原创 2015-07-31 09:25:16 · 215 阅读 · 0 评论 -
android平台的jni---使用宏定义精简JNI接口函数名称
精简JNI接口函数名称生成java的本地方法一般是通过如下步骤完成:1.编写带有native方法的Java类2.使用javah命令生成.h头文件;3.编写代码实现头文件中的方法javah命令生成的jni函数,JNI接口函数命名如下: Java_包名_类名_方法名jni接口函数是以_符号进行分割这么长的函数名称将是比较麻烦的事情,这里使用宏定义的方法,简单实现j...原创 2015-08-01 15:58:36 · 306 阅读 · 0 评论 -
JNI数据类型的详解
在Java中有两类数据类型:primitive types,如,int, float, char;另一种为reference types,如,类,实例,数组。 注意:数组,不管是对象数组还是基本类型数组,都作为reference types存在,有专门的JNI方法取数组中每个元素。1、voidjava的void与JNI的void是一致的。2、基本数据类...原创 2015-08-01 16:11:12 · 161 阅读 · 0 评论 -
JNI:使用RegisterNatives方法传递和使用Java自定义类
除了使用传统方法实现JNI外,也可以使用RegisterNatives实现JNI。和传统方法相比,使用RegisterNatives的好处有三点:1、C++中函数命名自由,不必像javah自动生成的函数声明那样,拘泥特定的命名方式;2、效率高。传统方式下,Java类call本地函数时,通常是依靠VM去动态寻找.so中的本地函数(因此它们才需要特定规则的命名格式),而使用RegisterNa...原创 2015-08-01 16:35:10 · 89 阅读 · 0 评论 -
jni使用RegisterNatives注册本地方法
1. 以前在jni中写本地方法时,都会写成 Java_com_example_hellojni_HelloJni_stringFromJNI的形式,函数名很长,而且当类名变了的时候,函数名必须一个一个的改,麻烦。现在好了有了RegisterNatives,现在一片顶过去五片,蓝瓶的好喝的!2. hello-jni.c中[code="c"]#include #include ...原创 2015-08-01 17:49:51 · 359 阅读 · 0 评论 -
JNI中java类型的简写
在JNI中,当我们使用GetFieldID/GetStaticFieldID或GetMethodID/GetStaticMethodID及定义JNINativeMethod等时,我们需要表示成员变量的类型,或函数传入参数或返回的类型。JNI把Field的类型,或函数传入参数或返回值的类型进行简写以char*的形式进行表示。对于成员变量,直接用java类型的简写表示成员变量的类型就可以比...原创 2015-08-03 13:08:55 · 145 阅读 · 0 评论 -
[转]Android JNI层实现文件的read、write与seek操作
1、 在Android的java层实现文件的读写操作是非常简单的 在JNI层实现文件的读写操作的话,就要使用到linux的读写函数了。2、打开文件[code="c"]int open( const char *pathname,int flags, int mode);[/code]返回值:为一个文件句柄(fd),供read、write等...原创 2015-08-03 14:41:50 · 155 阅读 · 0 评论 -
JNI调用java中的类方法和静态方法
在JNI调用中,肯定会涉及到本地方法操作Java类中数据和方法。在Java1.0中“原始的”Java到C的绑定中,程序员可以直接访问对象数据域。然而,直接方法要求虚拟机暴露他们的内部数据布局,基于这个原因,JNI要求程序员通过特殊的JNI函数来获取和设置数据以及调用java方法。一、取得代表属性和方法的jfieldID和jmethodID为了在C/C++中表示属性和方法,JNI在jni.h...原创 2015-08-03 16:46:57 · 348 阅读 · 0 评论 -
超简单的NDK单步调试方法
最近为了性能需求,开始搞JNI,白手起搞真心不容易。中间差点崩溃了好几次,最终总算得到一点心得。 JNI对性能的提升没有我预想中的大,对于for循环的速度提升大概在1倍左右,所以如果数量级不大的话,性能提升不会很明显JNI编完之后,不能调试,是不是很蛋疼,不像android Java可以看出错信息。JNI crash之后,界面上表示为没有任何反应,过段时间直接退出应用,没有...原创 2015-08-03 21:19:06 · 79 阅读 · 0 评论 -
如何不要让ndk-build自动删除.so
在用ndk-build的时候突然发现在编译完成之后会自动删除armeabi下面所有的so文件,这就会有问题,因为我目录下还放了其它第三方的so文件,这要是删除了岂不是出问题了...解决办法:把所有的第三方so文件放到jni目录下,然后在mk文件最后加上如下:[code="mk"]include $(CLEAR_VARS)LOCAL_MODULE := libxxxLOC...原创 2015-08-04 15:33:58 · 248 阅读 · 0 评论 -
jni内存释放
调用GetStringUTFChars,GetDoubleArrayElements等相关方法时,用完之后需要对应调用ReleaseStringUTFChars,ReleaseDoubleArrayElements调用GetObjectArrayElement不需要释放,但用完需要调用DeleteLocalRef删除对应局部引用如[code="c++"]jstring temp...原创 2015-09-24 12:03:35 · 411 阅读 · 0 评论 -
warning:deprecated conversion from string constant to 'char *' 解决方案
[code="c++"]char* createClass(){ return "aaa";}[/code]ndk中写了个cpp文件,文件中就写了一个方法,在编译的时候就报错:[quote]warning:deprecated conversion from string constant to 'char *'[/quote]Linux 环境下当GCC版...原创 2015-09-25 09:01:08 · 307 阅读 · 0 评论 -
插件化的基石 -- apk动态加载
Android动态加载技术在蘑菇街的第一次实践,还是在14年的时候,使用的就是之前网上广(tu)为(du)流(si)传(fang)的方式,这种方式有一个重大缺陷,就是插件内部对资源的访问只能通过自己定义的方式,包括对layout文件的inflate等,使用getResouces的方式,分分钟crash给你看,而且内部实现有些复杂,容易出现莫名其妙的ResourcesNotFound错误。在一段时间...原创 2015-09-25 09:13:49 · 84 阅读 · 0 评论