模仿360安全卫士项目笔记11


103_广告平台的使用_26

1、简单介绍,并进入平台

万普广告:http://www.waps.cn/?f=yangguangfu 

友盟

有米

多盟

酷果

2、下载sdkd

3、演示在各个平台上传了的软件

 

4、演示广告demeo

5、嵌入到手机卫士;

 

 

104_应用程序的混淆_36

1、做软件的方向

A、男人好色类;--拔裙子

B、女人爱美类;--美图秀秀。

C、老人类;--BIG Launcher或者智能桌面

D、创意游戏-愤怒的小鸟,会说话的汤姆猫

E、养生保健-春雨医生 

 

 

2、反编译很容易得到布局文件

切换目录:

C:\Users\Administrator>cd /d D:\手机卫士\day9\apktool

拷贝手机卫士到该目录。

反编译命令:apktool d D:\手机卫士\day9\apktool\mobilesafe.apk

就可以得到资源文件;

 

 

 

 

资源文件如何加密呢?使用ApkEntTool工具加密

 

加密后解压需要密码了。这方式可以保护资源文件,但这种是能简单保护。

对应程序员,如果同样用ApkEntTool是可以解密的。

 

这种方式是假加密,只是修改文件的特征码,让window系统上的解压软件都认为apk有密码,其实并没有密码。只是欺骗了这些软件,这种方式是一种伪加密;

 

 

3、如何代码加密

代码才是应用程序的核心东西;

 

A:使用Smali2JavaUI.exe打开看我们写的手机卫士;

能看到写的代码;

 

B:然后在用Smali2JavaUI.exe该工具打开其他软件360或者金山手机卫士;

 

C:给自己工程加密

 

查看工程里的project.properties文件;

 

# This file is automatically generated by Android Tools.

# Do not modify this file -- YOUR CHANGES WILL BE ERASED!

#

# This file must be checked in Version Control Systems.

#

# To customize properties used by the Ant build system edit

# "ant.properties", and override values to adapt the script to your

# project structure.

#

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

#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

 

#这个文件是Android工具自动生成。

#不要修改这个文件——您的更改将被删除!

#这个文件必须在版本控制系统检查。

#定制的蚂蚁使用的属性构建系统编辑

#“蚂蚁。属性”,和覆盖值适应剧本到你

#项目结构。

为了使移位收缩和混淆你的代码,取消这个(可用属性:sdk.dir,家庭用户。):

#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

uncomment 取消、obfuscate 混淆 、shrink 收缩、

 

 

把这个:

#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

 

修改成:

proguard.config=proguard-android.txt

并且把

D:\adt-bundle-windows-x86-20131030\sdk\tools\proguard\proguard-android.txt文件拷贝到工程根目录;

 

 

签名后才代码混淆,然后签名打包是报错,如果解决呢?

proguard-android.txt在里面加上:

 keep public class cn.waps.** {*;}

-keep public interface cn.waps.** {*;}

-dontwarn cn.waps.**

 

 

 

打包成功后,再用反编译工具查看代码;

 

 

4、混淆的原理

打包成功后,工程多了一个目录proguard

混淆后的APK比原来的APK要小。

把混淆前的APK和混淆后的都解压看一下classes.dex各自的大小;

 

打工工程proguard目录的:mapping.txt文件

 

混淆原理:在编译成字节码的时候,对类名还有方法名 进行动态的替换;

例如:

Student student  = new Student();->a

Public void shudentEnglishWhenAtTime(long time){->b

}

student.shudentEnglishWhenAtTime(24);

student.shudentEnglishWhenAtTime(1);

 

a.b(24);

a.b(1);

 

mapping.txt这个文件包含了对应关系,该文件千万别弄丢。

 

 

5、混淆常见问题

拷贝任意一个jar到工程里面,签名报错。

 

解决方案在proguard-android.txt文件里添加:

-dontwarn <包名>.**

-keep class <包名>.** {

    *;  

例如:

-dontwarn net.htmlparser.jericho.**

-keep class net.htmlparser.jericho.** {

    *;  

 

 

 

 

 

 

 

 

 

105_应用程序的数据统计_33

1、模拟一个bug.

在开发阶段解决问题很容易,看日志就知道什么问题;

如果是用户玩的话,用户不知道什么原因。

 

2、如果把应用的异常抓到。

A:创建新类MobileSafeApplication 继承Application

它代表整个应用程序,使用它需要在功能清单文件配置;

 

Base class for those who need to maintain global application state. You can provide your own implementation by specifying its name in your AndroidManifest.xml's <application> tag, which will cause that class to be instantiated for you when the process for your application/package is created.

对于那些需要维护全局应用程序状态的基类。你可以通过在你的AndroidManifest.xml指定其名称提供自己的实现。XML <application>的标签,这将导致这类被实例化时为您为您的应用程序/包创建过程。

 

B:在功能清单文件配置

点击Application --name -Browser

 

实现Application的onCreate和onTerminate()方法

onCreate说明

Called when the application is starting, before any other application objects have been created. Implementations should be as quick as possible (for example using lazy initialization of state) since the time spent in this function directly impacts the performance of starting the first activity, service, or receiver in a process. If you override this method, be sure to call super.onCreate().

当应用程序开始之前,任何其他应用程序对象被创建。实现应该尽可能快的(用状态延迟初始化例如)由于直接影响花在这个函数的时间性能开始活动,服务,或接收器的过程中。如果你重写此方法,一定要打电话oncreate()超。

整个应用程序初始化在应用程序的其他对象被初始化前调用的方法

 

onTerminate方法说明

This method is for use in emulated process environments. It will never be called on a production Android device, where processes are removed by simply killing them; no user code (including this callback) is executed when doing so.

该方法用于仿真加工环境。它永远不会被称为一个生产Android设备,进程,通过简单地杀死他们删除;没有用户代码(包括这个回调函数执行时)。

当进程结束的时候被回调。

 

 

@Override

public void onCreate() {

super.onCreate();

//处理没有捕获的异常

Thread.setDefaultUncaughtExceptionHandler(new MyUncaughtExceptionHandler());

}

private class MyUncaughtExceptionHandler implements UncaughtExceptionHandler{

 

//当产生了为捕获的异常回调

@Override

public void uncaughtException(Thread thread, Throwable ex) {

System.out.println("捕获了一个异常");

}

}

 

运行演示,看日志。

 

private class MyUncaughtExceptionHandler implements UncaughtExceptionHandler{

 

//当产生了为捕获的异常回调

@Override

public void uncaughtException(Thread thread, Throwable ex) {

System.out.println("捕获了一个异常");

//把自己杀死,会重新创建进程

android.os.Process.killProcess(android.os.Process.myPid());

}

}

 

运行演示,看进程id有变化。

 

C:把日志保存起来

private class MyUncaughtExceptionHandler implements UncaughtExceptionHandler{

 

//当产生了为捕获的异常回调

@Override

public void uncaughtException(Thread thread, Throwable ex) {

try {

System.out.println("捕获了一个异常");

File file = new File(Environment.getExternalStorageDirectory(), "error.log");

PrintWriter printWriter = new PrintWriter(file);

ex.printStackTrace(printWriter);

printWriter.close();

catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

//把自己杀死,会重新创建进程

android.os.Process.killProcess(android.os.Process.myPid());

}

}

 

运行,报错,看日志。找到报错代码的地方;

 

D:在记录日志的时候可以记录一下信息;

当前系统时间

系统的版本

手机信息 ,例如,小米手机,华为手机等等

当前手机运行了哪些应用;

 

E:用第三方平台统计报错信息,广告平台集成统计报错功能。

友盟统计

百度

 

 

 

 

 


  


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值