android---Percel

分析android逆向的学习路线 俗话说:“一入逆向深似海,从此头发是路人”。 安卓逆向作为当下热门行业“网络安全”的主要技术之一,已经受到了越来越多人的青睐。但是很多刚入门的新手小伙伴对于怎么去学习却还很是迷糊。本文就分享一下android逆向的学习路线供大家参考。 目前学习安卓逆向的人群大约分为两种: 第一种是完全没有任何基础的计算机纯小白; 第二种是本来就做开发懂编程的IT行业人员。 我们就针对这两个不同的人群做一下安卓逆向的学习路线分析。 一、无基础小白想入门 作为没有任何基础想要入门的计算机纯小白,学习上推荐参照以下步骤: (一 阅读详情

Parcelable:一种封装数据的容器。

实现的方法:

       1)writeToParcel方法。

       2)describeContents方法。

      3 )  public static final Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>() {


《1》先了解Parcelable的简单用法

         我们在activity之间进行数据传递时,传递一些简单的基本类型,android是提供写好的方法的。但我们

需要传递一个实体类,比如一个stu对象,就没有相关的api了,这个时候我们可以使用Parcelable.

package com.example.test0001.domain;

import java.util.HashMap;

import android.os.Parcel;
import android.os.Parcelable;

public class Person implements Parcelable {

	public HashMap<String, String> map = new HashMap<String, String>();

	public String name;

	@Override
	public int describeContents() {
		return 0;
	}

	@Override
	public void writeToParcel(Parcel dest, int flags) {

		dest.writeMap(map);
		dest.writeString(name);
	}

	public static final Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>() {
		@SuppressWarnings("unchecked")
		@Override
		public Person createFromParcel(Parcel source) {
			Person p = new Person();
			p.map = source.readHashMap(HashMap.class.getClassLoader());
			p.name = source.readString();
			return p;
		}

		@Override
		public Person[] newArray(int size) {
			return null;
		}
	};

}

以上是对person对象的封装,将对象封装到包裹中。

《2》下面就简单的传递数据,先了解两个常用的数据绑定和数据获取的方法。


   intent.putExtra("yes", p);//封装数据

   Person p = i.getParcelableExtra("yes");//获取数据

================================发送数据============================================

package com.example.test0001;
import java.util.HashMap;
import com.example.test0001.domain.Person;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
//发送的Activity
public class TestNew extends Activity {
 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Intent intent = new Intent();
        Person p = new Person();
        p.map = new HashMap<String,String>();
        p.map.put("yes", "ido");
        p.name="ok";
        intent.putExtra("yes", p);
        intent.setClass(this, Test.class);
        startActivity(intent);
    }
}

================================接收数据============================================

package com.example.test0001;
import com.example.test0001.domain.Person;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
public class Test extends Activity {
   
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.test);
        Intent i = getIntent();
        Person p = i.getParcelableExtra("yes");
        System.out.println("---->"+p.name);
        System.out.println("---->"+p.map.size());
    }
}

《3》下面是比较难的部分,关于Parcel分析

Parcel的内存机制:

    C语言中结构体的内存对齐和Parcel采用的内存存放机制一样 ,即读取最小字节为32bit,也是

4个字节。高于4个字节的,以实际数据类型进行存放,但必须为4byte的倍数;

实际存放字节:


实际读取字节:



另外一个注意点就是我们在writeXXX()和readXXX()时,导致的偏移量是共用的,例如,我们在writeInt(23)后,

此时的datapostion=4,如果我们想读取5,简单的通过readInt()是不行的,只能得到0。这时我们只能通过

setDataPosition(0)设置为起始偏移量,从起始位置读取四个字节,即23。因此,在读取某个值时,可能需要使用

setDataPostion(int postion)使偏移量装换到我们的值处。

巧用setDataPosition()方法,当我们的parcel对象中只存在某一类型时,我们就可以通过这个方法来快速的读取

所有值。具体方法如下:

 

[html]
  1. /**  
  2.      * 前提条件,Parcel存在多个类型相同的对象,本例子以10个float对象说明:  
  3.      */  
  4.     public void readSameType() {  
  5.         Parcel parcel =Parcel.obtain() ;  
  6.         for (int i = 0; i < 10; i++) {  
  7.             parcel.writeDouble(i);  
  8.             Log.i(TAG, "write double ----> " + getParcelInfo());  
  9.         }  
  10.         //方法一 ,显示设置偏移量   
  11.         int i = 0;  
  12.         int datasize = parcel.dataSize();  
  13.         while (i < datasize) {  
  14.             parcel.setDataPosition(i);  
  15.             double fvalue = parcel.readDouble();  
  16.             Log.i(TAG, " read double is=" + fvalue + ", --->" + getParcelInfo());  
  17.             i += 8; // double占用字节为 8byte   
  18.         }  
  19. //      方法二,由于对象的类型一致,我们可以直接利用readXXX()读取值会产生偏移量  
  20. //      parcel.setDataPosition(0)  ;  //  
  21. //      while(parcel.dataPosition()<parcel.dataSize()){  
  22. //          double fvalue = parcel.readDouble();  
  23. //          Log.i(TAG, " read double is=" + fvalue + ", --->" + getParcelInfo());  
  24. //      }  
  25.     } 

Ceres Solver:从入门到使用 Ceres Solver是谷歌开源的C++非线性优化库,能够解决有约束或无约束条件下的非线性最小二乘问题。2010年之后大量的运用在谷歌的产品开发中,尤其在谷歌开源的cartographer中被大量的使用。 ceres可以在Linux,Windows,macOS,Andrioid,IOS系统进行安装使用,详情可查看下方的官网链接。 Ceres Solver 官网:http://ceres-solver.org/ 阅读详情

相关推荐

Fluent求解器——湍流参数的设置

Fluent湍流参数的介绍和设置。

Ronko_G的博客 4万+

Android 进程间通信 Binder

相关文档参考: 打开链接 http://blog.csdn.net/lin20044140410/article/details/51106372 打开链接 http://blog.csdn.net/lin20044140410/article/details/73739901 Android 进程间通信 Binder, 学习过程中的做的一些记录,不足之处,还请多指教! 相关代码可以查看...

lin20080410的专栏 1310

利用PLECS实现Boost变换器的闭环控制仿真与优化

本文详细介绍了如何利用PLECS仿真软件实现Boost变换器的闭环控制与优化。从基础原理到开环系统搭建,再到闭环控制设计与动态优化,提供了完整的仿真实践指南。通过PLECS的仿真功能,工程师可以有效诊断问题、优化参数,并实现高性能的DC-DC变换器设计。

weixin_42527401的博客 325

Android小技巧

1.使用Intent传递对象使用Intent来传递对象通常有两种实现方式:Serializable和Parcelable。Serializable是序列化的意思,标示将一个对象转换成可存储或可传输的状态,序列化后的对象可以在网络上进行传输也可以存储到本地,只需要让一个类去实现Serializable这个接口。可通过getSerialzableExtra()方法来获取通过参数传递过来的序列化对象。P...

WillLiaowh的博客 408

电力电子新手必看:COT控制模式的工作原理与典型应用场景解析

本文深入解析了COT控制模式的工作原理及其在电力电子领域的典型应用。COT控制(恒定导通时间控制)通过固定导通时间机制,解决了传统滞环控制的问题,特别适用于需要快速瞬态响应和高效率的应用场景,如CPU/GPU供电和便携设备电源管理。文章详细介绍了COT控制的核心流程、技术特点及设计实践中的关键考量,帮助电力电子新手快速掌握这一技术。

weixin_30745553的博客 522

量化实战:用三种波动率模型给你的期货策略做个“体检”(附Python代码与螺纹钢案例)

本文深入探讨了三种专业波动率模型(Parkinson、Garman-Klass和Rogers-Satchell)在期货量化策略中的应用,并以螺纹钢期货为例,展示了如何通过Python实现这些模型进行多维度波动率分析。文章详细比较了不同模型的特点和适用场景,提供了动态仓位管理、止损策略优化等实战应用方案,帮助交易者更精准地评估市场风险,优化策略表现。

weixin_26824299的博客 460

parcel打包实例-用parcel搭建开发环境

parcel是最近非常火热的一个前端构建工具,你可能会问,我webpack还没有学会,干嘛又要学习parcel,我不学,我不学,我不学,年轻人听我说,因为parcel非常简单,相当于webpack玄学般的配置来说,几乎是零配置就可以快速上手,使用parcel我们可以将更多的精力投入到开发工作中能,更早的下班,吃饭,陪女朋友逛街,达到人生巅峰。既然parcel这么好,我该如何学习,为了让大家快速的上...

花神的博客 3903

Word毕业论文排版:图片和表格题注的终极指南(含自动编号技巧)

本文是Word毕业论文排版中图片和表格题注的终极指南,详细讲解了如何利用题注功能实现自动编号,告别繁琐易错的手动操作。核心内容包括创建定制标签、配置带章节的编号格式、插入交叉引用以及一键更新全文编号的技巧,旨在帮助学生构建自动化文档体系,提升排版效率和论文严谨性。

weixin_29211309的博客 1097

Android Parcel对象详解

今天在公司没什么很急的事情,想起这几天一直在用Parcel这个类来做一些工作,但是我对这个类有比较强烈的陌生感,感觉它比较叼,我不是一个仅仅满足于使用的人,尤其是这种仅仅从使用方法上猜不到其实现,让人没有安全感的类,我更是决定将它将它进行比较详细地分析。关于Parcel的使用在分析Parcel之前,首先按照分析流程,介绍下关于Parcel的相关常规使用。首先是关于Parcel的获取:Parcel p

rainbowchou的技术日常 3万+

自适应控制 (Adaptive Control) 算法详解及案例分析

自适应控制是一种能够在线调整控制器参数以适应系统动态变化的控制方法。其核心思想是通过实时估计系统参数或调整控制器参数,使系统在不确定性或动态变化的环境中仍能保持稳定性和性能。

闲人编程的博客 4085

学Simulink——四开关 Buck‑Boost(FSBB)变换器的无缝模式切换仿真

本文详细介绍了使用Simulink实现四开关Buck-Boost(FSBB)变换器无缝模式切换的仿真方法。FSBB变换器因其输入输出同极性、单电感和双向能量流特性,广泛应用于光伏储能、USB-PD和车载电源等场景。文章重点解决了模式切换中的直通风险和占空比跳变问题,通过统一电压PI控制、Stateflow模式仲裁和200ns死区设计,实现了Buck(26V→24V)、Pass-Through(24V±1V)和Boost(22V)三种工作模式的无缝过渡。仿真结果显示输出电压稳定在12V±0.15V,切换过程无

amy_mhd的博客 67

android parcel分析,Android中Parcel用法详解

本文实例讲述了Android中Parcel用法。分享给大家供大家参考,具体如下:Android 中Parcel 的使用,他是一个存储基本数据类型和引用数据类型的容器,在andorid 中通过IBinder来绑定数据在进程间传递数据。Parcel parcel = Parcel.obtain();// 获取一个Parcel 对象下面就可以对其进行方法进行操作了,createXXX(),wirteXX...

weixin_32248781的博客 2920

【MicroPython编程-ESP32篇:设备驱动】-BNO08X系列传感器驱动

BNO08X 系列(BNO085/BNO086)是一款系统级封装 (SiP),集成了三轴加速度计、三轴陀螺仪、磁力计以及运行 CEVA SH-2 固件的 32 位 ARM® Cortex™-M0+ 微控制器。SH-2 包含 MotionEngine™ 软件,该软件提供复杂的信号处理算法来处理传感器数据,并提供精确的实时 3D 姿态、航向、校准加速度和校准角速度,以及更高级的上下文输出。BNO08X 集成在一个 28 引脚 LGA 封装中,尺寸为 3.8mm x 5.2mm x 1.1mm。它兼容 Andro

视觉与物联智能 696

Android -- 序列化Parcelable与Serializable区别及用法

小序继上一篇博客,http://blog.csdn.net/gaopeng0071/article/details/45043967说到的对象传递,对象类实现了Serializable接口。 Serializable接口,是java api提供的接口,实现此接口不需要我们做任何操作,java会自动帮我们进行序列化。 Parcelable接口,是Android提供的接口,实现此接口我们需要取实现接

GP的空间 1154

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

一句话解决安卓面试系列--java篇

文章目录一。 基础问题1.Java中 == 和 equals 和别:二。面向对象相关1.什么是多态?2.接口和抽象类?学习时间:学习产出: 一。 基础问题 1.Java中 == 和 equals 和别: 1. 没有复写就没区别,object中equals实现的就是== 2. 有些类会复写equals方法,比如string就是会判断每个字符是否相等。ArrayList通用会判断每个子item是否相等。 二。面向对象相关 1.什么是多态? 多态,是事务运行中的多种状态,一般指的是方法多态,即同名方法的不

金福林的博客 838

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Serializable 和 Parcelable 区别

android 中自定义的对象序列化的问题有两个选择一个是Parcelable,另外一个是Serializable。 一 序列化原因: 1.永久性保存对象,保存对象的字节序列到本地文件中; 2.通过序列化对象在网络中传递对象; 3.通过序列化在进程间传递对象。  二 至于选取哪种可参考下面的原则: 1.在使用内存的时候,Parcelable 类比Serializ

ywj2167917的专栏 589

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Android TransactionTooLargeException 解析,思考与监控方案

  最近公司遇到了一个很有意思的 Crash:android.os.TransactionTooLargeException,这个 Crash 大家可能见到过,错误堆栈的信息多种多样,下面是其中的常见错误堆栈信息之一: #1 main android.os.TransactionTooLargeException java.lang.RuntimeException:Adding window f...

weixin_34080571的博客 1604

CDP7 下载安装 Flink Percel 包

下载链接:https://www.cloudera.com/downloads/cdf/csa-trial.html 点击后选择版本, 然后点击download now,会有一个协议,勾选即可,然后就有三个文件列表, 我这里是已经注册登录的状态,如果没有注册,会有一个下载前的信息收集,随便填写一些用途、岗位、公司等,就可以过。 依次下载即可。 如果json下载不了,复制内容粘贴到json文件。 下载有点慢,我发布到某度网盘和优快云了 某度:链接:https://pan.baidu.com/s

NBA首席形象大使坤坤 4291

Android中的Parcel是什么

http://blog.csdn.net/nkmnkm/article/details/6451699 Parcel,翻译过来是“打包”的意思。打包干什么呢?是为了序列化。     如果要在进程之间传递一个整数,很简单,直接传就是行了;如果要传一个字符串,就稍微复杂了点:需先分配一块可以容纳字符串的内存,然后将字符串复制到内存中,再传递(新手可能问:为啥不直接把字符串的引用传过去呢?学过C/C

Skypine_Lee的专栏 1204

零配置打包工具 Parcel 实践

  继 Webpack 之后,又一款打包工具 Parcel 横空出世,Parcel 是快速、零配置的 Web 应用程序打包器; 1、 Parcel 使用工作进程启用多核编译,并具有文件系统缓存,即使在重新启动后也可快速重新构建。 2 、Parcel 支持JS,CSS,HTML,文件资源等等 - 不需要安装任何插件。 3、在需要时,代码使用 Babel,PostCSS 和...

山水子农 1万+

探索Android中的Parcel机制(上)

http://blog.csdn.net/caowenbin/article/details/6532217 一.先从Serialize说起          我们都知道JAVA中的Serialize机制,译成串行化、序列化……,其作用是能将数据对象存入字节流当中,在需要时重新生成对象。主要应用是利用外部存储设备保存对象状态,以及通过网络传输对象等。   二.Android中的新的序列

入凡尘笔录 2289

android parcel

简单点来说:Parcel就是一个存放读取数据的容器, android系统中的binder进程间通信(IPC)就使用了Parcel类来进行客户端与服务端数据的交互,而且AIDL的数据也是通过Parcel来交互的。在Java空间和C++都实现了Parcel,由于它在C/C++中,直接使用了内存来读取数据,因此,它更有效率。              分析Binder机制中的客户端与服务器端进行实际操

brucexu1978的专栏 919

Android—文件进行数据存储(四中操作模式)

简介:     Android进行文件存储主要有四种操作模式     1》Context.MODE_PRIVATE:默认模式,私有模式只能被本身应用进行访问,其它应用不能进行访问,本身应用访问文件,如果进行操作会对文件进行覆盖。     2》Context.MODE_APPEND:append模式下对文件访问会自动检查文件是否存在,会追加内容,如果文件不存在则进行创建文件。     3》M

javaMov的专栏 1387

张飞学Android之嘲讽Context

《1》 //允许访问应用程序特定的资源和类,以及电话应用程序级的操作如发射活动,广播和接收的意图等 public abstract class Context {  public static final int MODE_PRIVATE = ????;//  public static final int MODE_WORLD_READABLE = 0x0001; public

javaMov的专栏 1171

Android应用程序开发入门——基础概念

Android 程序是利用Java语言来开发的。编译完成的java代码、数据和资源文件是通过一个叫做aapt的工具进行打包,打包之后会生成一个.apk文件。最终用户可以将.apk文件安装在Android手机上; 一般情况下,一个.apk文件就被称为一个应用程序。 编译过程         .java-class==>dx.bat==>classes.dex

javaMov的专栏 1111

Ubuntu的学习shutdown联想到Android 的进程守护

1,关机命令 shutdown                1)shutdown  --help             moon@moon-ThinkPad-Edge:~$ shutdown --help 用法: shutdown [OPTION]... 时间 [信息] 使系统关闭。 Options:   -r                          reboot

javaMov的专栏 1103
上一篇: 保持好的心态
下一篇: Android------广告条
linuxMinx
博客等级 码龄15年 195粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值