开发知识
这篇文章按照时间顺序记录学习安卓逆向过程中遇到的开发知识。
资源使用
R.java
Android studio中,R.java所在目录为:app/build/generated/source/r/arm/debug/com.example.dfanghu.myapplication/R.java
R.java文件是编译器自动生成的,R.java会自动收录当前应用中所有的资源,并根据这些资源建立对应的ID
从表面上看,是ADT根据res目录中的资源自动生成R.java文件的,但实际上,ADT是通过aapt(Android Asset Packaging Tool )命令来生成R.java文件的。aapt.exe文件(Mac OS X和Linux的相应命令也叫aapt,但没有文件扩展名)位于<Android SDK安装目录>/platform-tools目录中。如果想手工生成R.java文件,可以在Windows控制台中输入如下的命令。
as开发过程中新增的资源在bulid后更新到r.java中。
方法
trim
使用Java的MessageDigest实现MD5加密算法
- getInstance:返回实现指定摘要算法的MessageDigest对象
- reset:任何时候都可以调用reset() 方法重置摘要
- update:更新摘要(MessageDigest对象在开始时会)被初始化,对象通过调用update() 方法处理数据
- digest:调用digest() 方法完成Hash计算
toHexString
转为十六进制
String s1 = Integer.toHexString(bytes[i$] & 0xFF);
postDelayed
使用Handler的postDelayed()方法实现延时操作
Handler handler=new Handler();
Runnable runnable=new Runnable(){
@Override
public void run() {
//这里写入要作的事情
handler.postDelayed(this, 2000);
}
};
handler.postDelayed(runnable, 2000);
currentTimeMillis
System.currentTimeMillis()显示当前系统时间,单位毫秒,从1970年1.1日开始
java
修饰符
static 修饰符
静态变量:
static 关键字用来声明独立于对象的静态变量,无论一个类实例化多少对象,它的静态变量只有一份拷贝。 静态变量也被称为类变量。局部变量不能被声明为 static 变量。
静态方法:
static 关键字用来声明独立于对象的静态方法。静态方法不能使用类的非静态变量。静态方法从参数列表得到数据,然后计算这些数据。
public class InstanceCounter {
private static int numInstances = 0;
protected static int getCount() {
return numInstances;
}
private static void addInstance() {
numInstances++;
}
InstanceCounter() {
InstanceCounter.addInstance();
}
public static void main(String[] arguments) {
System.out.println("Starting with " +
InstanceCounter.getCount() + " instances");
for (int i = 0; i < 500; ++i){
new InstanceCounter();
}
System.out.println("Created " +
InstanceCounter.getCount() + " instances");
}
}
//Starting with 0 instances
//Created 500 instances
应用权限
01、Android自身拥有的权限
通过元素<manifest…>添加<users-permission…>子元素
例如:在<manifest…/>元素里添加如下代码:
<调用Android系统中打电话的权限>
02、Android调用自身所需的权限
通过系统应用的各组件元素,<activity…/>元素添加<users-permission…>子元素。
例如:在<activity…/>元素里添加如下代码:
<声明Android系统中打电话的权限>
在android应用系统中,提供了大量的应用权限,这些权限基本上都位于Manifest.permission类中。下列是android中比较常用的应用权限,如下图所示:
权限 | 权限解释说明 |
---|---|
ACCESS_NETWORK_STATE | 允许获取网络状态信息权限 |
ACCESS_WIFI_STATE | 允许获取WiFi网络状态信息权限 |
BATTERY_STATS | 允许获取电池状态信息权限 |
BLUETOOTH | 允许获取匹配的蓝牙设备权限 |
BLUETOOTH_ADMIN | 允许获取发现匹配的蓝牙设备权限 |
BROADCAST_SMS | 允许广播收到短信提醒的权限 |
CALL_PHONE | 允许拨打电话的权限 |
CAMERA | 允许使用照相机的权限 |
CHANGE_NETWORK_STATE | 允许改变网络连接状态的权限 |
CHANGE_WIFI_STATE | 允许WiFi网络连接状态的权限 |
DELETE_CACHE_FILES | 允许删除缓存文件权限 |
DELETE_PACKAGES | 允许删除安装包权限 |
FLASHLIGHT | 允许访问闪光灯的权限 |
INTERNET | 允许打开socket的权限 |
MOODIFY_AUDIO_SETTINGS | 允许修改全局声音设置的权限 |
PROCESS_OUTGOING_CALLS | 允许监听、控制、取消呼出电话的权限 |
READ_CONTACTS | 允许读取用户的联系人数据的权限 |
READ_HISTORY_BOOKMARKS | 允许读取历史书签的权限 |
READ_OWNER_DATA | 允许读取用户数据的权限 |
READ_PHONE_STATE | 允许读取电话状态的权限 |
READ_PHONE_SMS | 允许读取短信的权限 |
REBOOT | 允许重启系统的权限 |
RECEIVE_MMS | 允许接收、监控、处理彩信的权限 |
RECEIVE_SMS | 允许接收、监控、处理短信的权限 |
RECORD_AUDIO | 允许录音的权限 |
SEND_SMS | 允许发送短信的权限 |
SET_ORIENTATION | 允许旋转屏幕的权限 |
SET_TIME | 允许设置时间的权限 |
SET_TIME_ZONE | 允许设置时区的权限 |
SET_WALLPAPER | 允许设置桌面壁纸的权限 |
VIBRATE | 允许访问振动器的权限 |
WRITE_CONTACTS | 允许写入用户联系人的权限 |
WRITE_HISTORY_BOOKMARKS | 允许写历史书签的权限 |
WRITE_OWNER_DATA | 允许用户数据的权限 |
WRITE_SMS | 允许写短信的权限 |