首页
学习
活动
专区
圈层
工具
发布
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Android跨进程通信IPC之3——关于JNI的那些事

    4、JNI中的一些概念 natvie:Java语言中修饰本地方法的修饰符(也可以理解为关键字),被该修饰符修饰的方法没有方法体 Native方法:在Java语言中被native关键字修饰的方法是Native...在Java里,每一个一个process可以产生多个JavaVM对象,但是在android上,每一个process只有一个Dalvik虚拟机对象,也就是在android进程中是通过有且只有一个虚拟机对象来服务所有...* 因为我们没有真的启动虚拟机,它们都被存储在基本框架中并没有发布。 * 使用Push / Pop管理存储。...REG_JNI(register_android_graphics_Typeface), REG_JNI(register_android_graphics_Xfermode), REG_JNI...另外,ART虚拟机在GC算法有所优化,为了减少内存碎片化问题,在GC之后有可能会移动对象内存的位置,对于Java层程序并没有影响,但是对于JNI程序要注意了,对于通过指针来直接访问内存对象时,Dalvik

    3K50

    Android上的自定义字体 - 通过XML进行动态字体选择

    前言 这是我们系列自定义字体在Android上的第2篇文章。在之前,我们已经看到如何使用自定义字体并将不同的样式应用于TextView。...虽然在这篇文章中解释了使用多种字体的简单方法,但请谨慎行事。任何具有太多字体的UI都会变得混乱!通过XML直接设置字体非常方便,而不需要额外的Java代码。...第一步是在/values/文件夹中添加一个attrs.xml。内容如下所示: 在代码和XML中访问该属性。接下来,让我们在/values/strings.xml中添加我们要用作String资源的字体名称: <?...2、使用字体 - 属性 我们需要在xml文件中添加一行: xmlns:app="http://schemas.android.com/apk/res-auto" 在您的最高视图层次元素。

    2.2K60

    【Android 内存优化】Android 原生 API 图片压缩原理 ( 图片质量压缩方法 | 查找 Java 源码中的 native 方法对应的 C++ 源码 )

    文章目录 一、 图片质量压缩方法 二、 查找对应的 Native 方法源码 三、 分析 Bitmap.cpp 中动态注册 Native 方法 在博客 【Android 内存优化】图片文件压缩 ( Android...Native 方法源码查找方法 : ① 文件名相同 : 一般情况下 Java 源码中的 Java 类的类名与对应的定义 Native 方法的 C++ 源码文件名称相同 ; ② 源码搜索 : 如果找不到...方法定义在 frameworks\base\core\jni\AndroidRuntime.cpp 中 , 在该方法中又调用了 libnativehelper\JNIHelp.cpp 中的 jniRegisterNativeMethods...方法 , 在该方法中调用了 JNIEnv 的 RegisterNatives 方法注册了这一批 Bitmap.java 的函数 ; 2....Bitmap.cpp 中完整动态注册代码 : 其中对关键代码进行了注释 ; // 调用的 register_android_graphics_Bitmap 注册函数方法定义在该头文件中 #include

    1.2K20

    逆向APK进行smali注入实现“秒破WIFI”

    近期开始关注手机安全了,以往都是在PC上玩,对这个领域也想了解一下,可是拿什么来开刀呢?.../text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z move-result v0 if-nez v0, :cond_0 这是一个非常关键的方法的实现...,我们看到该方法有两个参数,一个是AccessPoint类的对象,另一个是String字符串,方法的一开始就实例化了一个StringBuilder的对象,然后使用append不断的拼接该字符串,大概的拼接规则是这样的...;->show()V 这段代码就是使用AlertDialog类的一系列方法弹出对话框,把密码显示出来。...本例中的这个APK也是有报错的,好在还不多,都一一解决了。其实我本来想把资源报错这个问题的细节写进来,但其实这是个体力活!而且每款软件都不同,几乎没有借鉴意义。

    1.7K60

    破解第一个Android程序

    在实际分析中,还可以使用IDA Pro直接分析APK文件,使用dex2jar与jd-gui配合进行Java源码级的分析等。这些分析方法会在本书后面的章节中详细介绍。...Android程序时,string.xml文件中的所有字符串资源都在gen//R.java文件的String类中标识,每个字符串都有唯一的int类型的索引值。...可以猜测:ApkTool内部使用baksmali将APK中的DEX文件反编译为smali文件,但ApkTool在反编译APK时没有处理instant-run.zip中的DEX文件,因此,在反汇编输出信息中没有程序真正的反汇编代码...可以在Android Studio中通过菜单项“File”→“Project Structure...”进行设置,更简单的方法是在buildTypes的release项下添加如下内容。...其中,->this$0是内部类MainActivity$1中的一个synthetic字段,存储的是父类MainActivity的引用。

    3.8K20

    Android开发减少方法数的建议 博客分类: Android小技巧 方法数android

    这要从dex的文件格式说起,在把源码编译、转化为dex文件格式时,dex文件中会有一个区域包含了所有源码中定义或引用的方法列表。这个区域中所有方法项的总数就是方法数。.../content/Intent;)V Method: startActivityForResult (Landroid/content/Intent;I)V 可以看出,这里面的方法是包含代码中引用的方法的...方法1 避免在内部类中访问外部类的私有方法/变量 当在Java内部类(包括内部匿名类)中访问外部类的私有方法/变量时,编译器会生成额外的方法,这也会增加方法数,建议编码时尽量避免。...,但是虚拟机却认为Foo和Foo$Inner是两个不同的类,为了支持Foo$Inner访问Foo的private成员,编译器会生成两个额外的方法,而生成的这些方法也算在方法总数里面 /*package*...方法2 避免调用派生类中的未被覆盖(override)的方法 考虑下面的代码 publicclass DemoActivity extends Activity { @Override

    65850

    JNI 解析以及在 Android 中的实际应用

    ,特别是包名比较深的话,就更加明显了 声明Native方法的类需要用javah生成头文件, 在以前的开发中需要自己手动生成,现在是工具帮我们生成了而已 初次调用JIN方法时需要建立关联,影响效率,在建立关系的时候是全局搜索的...虚拟机就会找到这个函数并调用该函数,因此可以在该函数中做一些初始化的动作,其实这个函数就是相当于Activity中的onCreate()方法。...反射能做到的,在JNI中通过类似的反射也是可以做到的,这些方法原型在jni.h文件里面,比如 大家可以多去看看那些方法,基本上各种类型的方法都有,运行如下: 3 JNI数据类型 上面我们提到JNI...()方法没有参数,返回值为空所以对应的描述符为: "()Landroid/app/Application;",括号类为参数,其他的表示返回值,通过javap -s -p 也可以看的出来的,一般对应规则如下...4 JNI在Android中的实际应用 前面说了,JNI在整个Android系统中发挥了重要的作用,是连接底层和框架层的桥梁,在Android源码中更是大量的JNI代码,我们来说一个实际的例子:获取签名并且校验签名

    1.9K20

    Paint基本使用

    Paint 基本使用 《Paint的方法主要可以抽象成两大类》: 1.1 负责设置获取图形绘制、路径相关的 1.setStyle(Paint.Style style) 设置画笔样式,取值有 Paint.Style.FILL...:填充内部 Paint.Style.FILL_AND_STROKE :填充内部和描边 Paint.Style.STROKE :仅描边、 注意STROKE、FILL_OR_STROKE与FILL模式下外轮廓的位置会扩大...Typeface getTypeface() Typeface setTypeface(Typeface typeface) 获取与设置字体类型。...Android默认有四种字体样式:BOLD(加粗)、BOLD_ITALIC(加粗并倾斜)、ITALIC(倾斜)、NORMAL(正常),我们也可以通过Typeface类来自定义个性化字体。...float getTextSkewX() void setTextSkewX(float skewX) 获取与设置文字倾斜,参数没有具体范围,官方推荐值为-0.25,值为负则右倾,为正则左倾,默认值为0

    1.8K20

    网秦安全盾 原理分析

    在 NqApplication 类 method protected attachBaseContext(Landroid/content/Context;)V 中都分别调用了这些函数: 3..invoke-static...通过分析 JNI 方法注册到 Dalvik 虚拟机的过程,可以得到 java 层 native 函数与 so 层函数 对应的关系为: native nq10 -> b9df1ce797fd03603fd7137afff2957.../content/Con text;)V 该函数是将 assets 文件夹中的 DexToLoad.apk 与 nqdata 拷贝到/data/data+包名/.cache 目录中,然后调用 nq10...在 arch-arm\usr\include\linux\ inotify.h 头文件中定如下: #define IN_OPEN 0x00000020 ,根据线程函数可以看出它是监视/proc/pid/...java 层 CopyBinaryFile 函数中被调用到,我们在 so 中对 b9df1ce797fd03603fd7137afff2957 函数下断点,动态分析看它都做了些什么?

    1.2K00

    腾讯零反射全动态Android插件框架Shadow解析

    (Landroid/graphics/Rect;Landroid/graphics/Rect;)Z (light greylist, reflection) W/System.err: StrictMode...可见,即使它的实现代码中没有出现任何非公开SDK的引用,实际上它依赖的第三方组件内部也使用了非公开SDK接口。...在实际使用过程中,我们的宿主对于业务接入在增量上有极其苛刻的要求。Shadow接入时只使用了15.1KB,160个方法。...如果插件Activity不是一个真的Activity,只是一个跟Activity有差不多方法的普通类,这件事就简单多了,只需要让壳子Activity持有它,转调它就行了。...Shadow做了一个非常简单事,通过运用AOP思想,利用字节码编辑工具,在编译期把插件中的所有Activity的父类都改成一个普通类,然后让壳子持有这个普通类型的父类去转调它就不用Hack任何系统实现了

    4.1K40

    Lambda引发的惨案 | Transform进阶教程

    那么Transform在这个时候其实就是一个完全没有被脱糖过的代码,所以还是要感谢那位同学的评论,让我在马上意识到了这个问题,所以才有了这篇水文。...Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。使用 Lambda 表达式可以使代码变的更加简洁紧凑。 上面是java对于lambda的释义,那么什么是lambda的本质呢。...对于ClassNode来说,所有的栈帧上的方法调用都会被转化成AbstractInsnNode,而一个INVOKEDYNAMIC则对应的是InvokeDynamicInsnNode实现类,所以方法上只要有...我就是根据这个类里面获取到的动态链接所指向的函数信息,找到了对应的静态方法。 那么到这里,我们已经成功获取到了Lambda指向的静态方法了,所以后续我们也就又可以为所欲为了啊。...TODO 但是这个由于是一个静态方法,所以当前如果只是插入一些静态方法应该都是没问题的,如果是要生成相对来说更复杂的代码,比如之前写的双击优化就不行了啊。这个我后面在盘一盘想一想。

    51720

    Lambda引发的惨案 | Desugar顺序变更

    那么Transform在这个时候其实就是一个完全没有被脱糖过的代码,所以还是要感谢那位同学的评论,让我在马上意识到了这个问题,所以才有了这篇水文。...Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。使用 Lambda 表达式可以使代码变的更加简洁紧凑。 上面是java对于lambda的释义,那么什么是lambda的本质呢。...对于ClassNode来说,所有的栈帧上的方法调用都会被转化成AbstractInsnNode,而一个INVOKEDYNAMIC则对应的是InvokeDynamicInsnNode实现类,所以方法上只要有...我就是根据这个类里面获取到的动态链接所指向的函数信息,找到了对应的静态方法。 那么到这里,我们已经成功获取到了Lambda指向的静态方法了,所以后续我们也就又可以为所欲为了啊。...TODO 但是这个由于是一个静态方法,所以当前如果只是插入一些静态方法应该都是没问题的,如果是要生成相对来说更复杂的代码,比如之前写的双击优化就不行了啊。这个我后面在盘一盘想一想。

    1.4K10

    Android逆向之--------常见Davlik字节码解释

    方法运算时从栈中的局部变量区取数据进行运算将结果存放在操作数栈中,最后返回的时候从操作数栈中弹出结果 而davlik虚拟机运行时中也为每一个线程维护了一个PC计数器和一个调用栈,不同的是这个调用栈中维护了一个寄存器列表...,至于虚拟寄存器分配多少个是根据方法结构体中的registers字段给出,davlik虚拟机根据这个字段创建一份虚拟的寄存器列表。...: invoke-super {寄存器 :代表调用者和参数},方法所属的类;->方法名称(参数类型)返回值【V代表无返回值】 invoke-super {p0,p1},Landroid/app/ActivityGroup...;->onCreate(Landroid/os/Bundle;)V 调用接口: invoke-interface {寄存器【和方法一样也是调用者和方法参数信息】}, 方法所属的接口全名;->方法名(参数类型...0或者相等时跳转(与if-nez相反) 方法返回: return-void 没有返回值 破解程序 分析修改smail文件 1.修改完smali文件安装到手机上 重新编译,回编译命令为 apktool

    67030
    领券