手机卫士 第十天

手机杀毒的原理

一、得到安装和未安装包的程序签名,将改签名进行计算Md5值

String plainText = pm.getPackageInfo(info.packageName,

PackageManager.GET_SIGNATURES).signatures[0]

.toCharsString();


二、将得到的MD5值,做为条件对病毒库进行查询,如果count(*)大于零,说明其为病毒。

public static boolean isVirus(String md5) {

SQLiteDatabase database = SQLiteDatabase.openDatabase(DB_PATH, null,

SQLiteDatabase.OPEN_READONLY);

Cursor c = database.rawQuery(

"SELECT count(*)  FROM datable d WHERE d.md5 = ?",

new String[] { md5 });

if (c.moveToNext()) {

int result = c.getInt(0);

c.close();

database.close();

return result > 0;

}

 

return true;

}


三、旋转动画(RotateAnimation)的使用与清除

a) 使用

RotateAnimation rotAnim = new RotateAnimation(0f, 360f,

Animation.RELATIVE_TO_SELF, 0.5f,

Animation.RELATIVE_TO_SELF, 0.5f);

// 播放一次的周长1.0秒

rotAnim.setDuration(1600);

// 是否之播放一次 明确指定次数(>=0)或者-1等价于INFINITE无限次

rotAnim.setRepeatCount(RotateAnimation.INFINITE);

/**

 * 重复模式 Parameters: repeatMode RESTART or REVERSE

 */

rotAnim.setRepeatMode(RotateAnimation.RESTART);

iv_act_scanning.startAnimation(rotAnim);


b) 清除动画效果

iv_act_scanning.clearAnimation();

四、卸载一个应用程序

Intent intent = new Intent(Intent.ACTION_DELETE);

intent.setData(Uri.parse("package:" + info.getPackageName()));

startActivity(intent);


五、横竖屏切换不重新开始生命周期的两种方式

a) 禁用横竖屏切换

 android:screenOrientation="portrait"


b) 设置Activity不关心对齐方式、屏幕大小、键盘改变(推荐)

android:configChanges="orientation|screenSize|keyboardHidden"

六、常见的应用文件目录的含义

a) /data/data/com.example.phoneguard/databases/数据库文件目录

b) /data/data/com.example.phoneguard/shared_prefs/SharedPreferences文件目录

c) /data/data/com.example.phoneguard/files应用文件目录

d) /data/data/com.example.phoneguard/caches/应用缓存文件夹


Fragment的使用

一、为了保证兼容性需要继承V4包中Fragment

a) 主界面代码

package com.example.fragmentdemo;

 

import android.os.Bundle;

import android.support.v4.app.FragmentActivity;

import android.support.v4.app.FragmentManager;

import android.support.v4.app.FragmentTransaction;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.TextView;

 

public class MainActivity extends FragmentActivity implements OnClickListener {

private TextView tv1;

private TextView tv2;

private TextView tv3;

private FragmentManager fm;

private FragmentTransaction ft;

 

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

tv1 = (TextView) findViewById(R.id.tv1);

tv2 = (TextView) findViewById(R.id.tv2);

tv3 = (TextView) findViewById(R.id.tv3);

 

fm = this.getSupportFragmentManager();

FragmentTransaction ft = fm.beginTransaction();

ft.replace(R.id.ll_fragment, new Fragmemt1());

ft.commit();

tv1.setOnClickListener(this);

tv2.setOnClickListener(this);

tv3.setOnClickListener(this);

 

}

 

@Override

public void onClick(View v) {

switch (v.getId()) {

case R.id.tv1:

ft = fm.beginTransaction();

ft.replace(R.id.ll_fragment, new Fragmemt1());

ft.commit();

break;

case R.id.tv2:

FragmentTransaction ft = fm.beginTransaction();

ft.replace(R.id.ll_fragment, new Fragmemt2());

ft.commit();

break;

case R.id.tv3:

ft = fm.beginTransaction();

ft.replace(R.id.ll_fragment, new Fragmemt3());

ft.commit();

break;

 

}

}

}


二、Fragment1的代码

 

import android.os.Bundle;

import android.support.v4.app.Fragment;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

 

public class Fragmemt1 extends Fragment {

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) {

// TODO Auto-generated method stub

return inflater.inflate(R.layout.fragment1, null);

}

}


三、Fragment2的代码

import android.support.v4.app.Fragment;

import android.os.Bundle;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

 

public class Fragmemt2 extends Fragment {

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) {

// TODO Auto-generated method stub

return inflater.inflate(R.layout.fragment2, null);

}

}


四、Fragment3的代码

import android.support.v4.app.Fragment;

import android.os.Bundle;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

 

public class Fragmemt3 extends Fragment {

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) {

// TODO Auto-generated method stub

return inflater.inflate(R.layout.fragment3, null);

}

}


应用程序混淆保护代码

i. 将sdk/tools/proguard/proguard-android.txt拷到项目根目录并将项目根目录project.properties的倒数第二行代码取消注释

# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):

proguard.config=proguard-android.txt

 

# Project target.

target=android-19


Activity防黑客保护

i. 私有的Activity很容易被黑客调用,不写

Intent-filter(私有化)

ii. 为意图过滤器加入权限,权限必须首先在清单文件中声明

服务的注意事项

i. 服务是后台运行组件,可以看成没有界面的Activity。默认运行在主线程的(这就解释了为什么服务存在,程序就不会销毁),同样耗时的操作也不能放在其方法中只能放在子线程中。

ii. 安卓中一个进程的默认使用存储为15MB,也就意味着几个个消耗资源的服务不应该允许再使用同一个进程。可以制定 Process=“:service1l来为其指定新的进程。同样四大组件都可以使用该配置开辟新的进程

安卓的权限模型

i. uid是程序安卓系统时生成的。OS通过uid生成和判断的权限

ii. 如果一个uid会腾出,其他新安装的应用也可能会使用该uid此时会重新生成权限

O权限重启手机

i. 伪装成系统应用

1. 在清单文件中配置 androidshared_user_id=”android.uid.systemsign”

2. 应用程序使用系统的签名

3. 发送重启的广播

没有网络访问权限的应用不见得安全

可以调用具有互联网访问权限的应用提交用户的隐私

 

可以修改system/usr/keylayout/qwerty.kl修键码的对应关系

获取Root权限

Runtime.getRuntime.exec(“su”)

pm disable 包名/或组件名

pm enable 包名/或组件名

pm install包名

pm uninstall 包名

静默安装应用

pm install -r 包名

am start -r Activity的全路径


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值