1. apk瘦身
假设模块为app
减肥
apk瘦身:apk减小. 在功能不变。
作用:节省用户下载消耗流量,下载apk可能性。
投资价值: 用户安装 用户活跃
实现步骤:
一.正常开发项目。
二.Gradle变量 3个变量
三.图片格式 3种处理方式
Module模块
Eclipse
打包:编译一个已签名的apk
Keystore&jks 可以通用。
使用as的build/generate signed apk
如果没有证书要创建证书
有的话要选择。
1.1. 对项目进行签名
1.添加jar到libs目录并且使用右键的Add As Lib绑定
2.编写代码
app/build.gradle
com.itheima.project91.MainActivity
public class MainActivity extends AppCompatActivity { |
com.itheima.project91.Person
public class Person {
|
3.导出apk包
没有证书的话选择创建
有证书的话选择已经存在的
签名完成后可以使用逆向助手 反编译
1.2. Gradle变量配置
1.2.1. MinifyEnabled
【文件】app/build.gradle
Java编译获取class 经过优化压缩进dex
//瘦身一。minifyEnabled对classes.dex 瘦身
// 1.整个项目都没有引用到jar 不编译到apk
//2.将代码进行混淆 Gson.toJson(Object ) a.b.(c)
releaseMinifyEnabled {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
1.2.2. shrinkResources
手工查找未引用资源:Lint: 代码审查.使用as进行对未引用的资源进行搜索。
使用gradle配置处理
//瘦身二。shrinkResources主要对res目录下面的未引用的资源进行特殊处理。(替换图片 1像素)
//注意事项:必须在 minifyEnabled true
releaseShrinkResources {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
1.2.3. resConfigs
//默认配置 :跟编译有关系
defaultConfig {
applicationId "com.itheima.project91"
minSdkVersion 14
targetSdkVersion 24
versionCode 1
versionName "1.0"
//跟values有关系。国际 values-xx
// 了解 瘦身三。把需要打包到apk中的values文件夹设置成参数
resConfigs("zh")
}
反编译查看
1.2.4. 重新签名打包
把已经生成的apk中没有使用到v4 v7资源 删除
因为修改了apk内容,再进行安装会失败。安全性方面的原因。
但是可以重新签名 1.删除META-INFO 2使用签名工具重新签名
1.3. 图片处理减小apk
1.3.1. 格式转换 png-Jpg
1.3.2. Tynypng是一图片压缩网站
1.3.3. Webp格式
cwebp -q 75 test.png -o test.png.webp
注意事项:只能在4.0以上的设备正常运行。 但是目前4.0以上的设备占用率比较高.
2. Apk加固
加固:实际上是一种防止反编译技术。加一层shell.
.so不容易被反编译。
支付 基金 钱包 政府oa
梆梆 360加固保 爱加密
竞品
l 注册一个平台账号
l 使用账号密码去登录
l 将 一个签名的apk上传到平台。
l 等待平台加固后将它下载来。
l 只有通过重新签名才能进行安装
2.1. 梆梆加固
》》 1.注册开发者账号
http://passport.bangcle.com/users/regist
账号 289393698@qq.com 密码 testtest
》》2.使用开发者账号进行登录
http://passport.bangcle.com/authcenter/Users/userlogin
》》3.登录成功后进入后台管理中心
http://dev.bangcle.com/apps/index
》》4.提交 app 到服务端(跟爱加密不同, 梆梆只是进行代码的安全性检测)
》》5.下载
》》6.使用反编译查看
》》7.重新签名 apk
》》8.查看源代码
将签名成功的文件安装使用查看是否正常运行。
再使用常用的逆向助手进行代码分析, 查看变化
看不到 app 的源代码。 所以有效防止他人进行反编译
2.2. 360加固保
》》1.注册开发者账号
http://jiagu.360.cn/
账号 289393698@qq.com 密码 testtest
》》2.使用账号进行登录
》》3.可以选择两种方式进行加固
》》4.进入管理中心使用
http://jiagu.360.cn/qcmshtml/manager.html#record
选中应用上传可以看到上传记录
》》5.下载使用 因为这个 apk 没有进行签名 所以安装出现异常
所以得通过签名工具再次签名
点击进去看到
下载进行签名
》》6.安装使用
2.3. 爱加密
》》1.注册开发者账号
http://www.ijiami.cn/treg
账号密码 289393698@qq.com 密码 test test
》》2 使用开发者账号登录 登录成功的话 可以进入用户个人中心
》》3 提交 apk 进行加密体验
http://www.ijiami.cn/apply/encryptLogs
》》4 进入提交界面
》》5 提交并且等待加密后就可以下载
【 但是需要签名后才可以使用】
》》6 下载 爱加密的签名工具
》》7 运行签名
比较加固后代码
2.4. 加固后找资料
DDMS:
Windows: 查看屏幕显示哪个Activity
Tree View:查看 布局 自定义控件。
https://github.com/bingoogolapple/BGARefreshLayout-Android
http://blog.csdn.net/jan_s/article/details/43772697
https://github.com/ksoichiro/Android-ObservableScrollView
3. 应用统计
3.1. 应用统计
在不涉及用户隐私将用户使用行为搜集(打开页面时间,安装数量,启动应用次数).
原理:
1.搜集信息代码编译到apk。
2.获取参数通过网络发给服务器 服务端使用数据库保存。
3.后台使用图片展示给用户。
百度 友盟 谷歌
友盟:把这个搜集用户数据的代码都写好。(SDK)
连代码的使用笔记(文档)
一.注册开发者账号登录
二.Sdk集成
MobclickAgent:搜集与发送用户数据
AppKey:其实就是app统计数据的id
57eb7a0fe0f55a978f002fbe
可以根据key提出后台数据.
App应用的用户使用数据收集技术。
l 应用概况
l 基本指标
l 用户分析
l 渠道和版本
l 错误分析
例:http://mobile.umeng.com/apps/4100008dd65107258db11ef4/reports/realtime_summary
当公司上线一款app应用到应用商店前,在app里面添加收集用户数据的代码。在用户使用app时,app内的代码就会把用户的使用数据收集并发送给服务器。公司就可以知道以下数据,并且根据用户具体情况改进然后升级app
三. 下载友盟统计官方SDK
》》1.注册友盟统计用户: 账号 289393698@qq.com密码 testtest1
登录后选择自己需要的产品
》》2.获取AppKey
http://dev.umeng.com/analytics/android-doc/integration?spm=0.0.0.0.UHo4wP
提交后获得
保存
574a8b5de0f55af5e2001203
》》3.下载sdk
下载完成后解压
》》4.创建Demo程序
app/build.gradle
dependencies {
|
》》5.设置权限与app_key
app/src/main/AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
|
3.2. 友盟-基本统计
在每个Activity的onResume方法中调用
MobclickAgent.onResume(Context) ,
onPause方法中调用 MobclickAgent.onPause(Context)
》》1.添加代码
demo.itheima.com.demounmeng.MainActivity
//Session代表一次启动过程 在这次启动里面可以打开多个页面 |
【注意】 子类与父类不需要同时添加以上代码防止重复统计。(eg.使用TabHost、TabActivity、ActivityGroup时)。
》》2.进入后台看启动数据
3.3. 友盟-页面统计
1. MobclickAgent.onResume() 和MobclickAgent.onPause() 方法是用来统计应用时长的(也就是Session时长,当然还包括一些其他功能)
2.MobclickAgent.onPageStart() 和MobclickAgent.onPageEnd() 方法是用来统计页面跳转的
》》1.针对Activity
//Session代表一次启动过程 在这次启动里面可以打开多个页面
|
》》2.针对Fragment
demo.itheima.com.demounmeng.MainFragment
public void onResume() { |
》》3.在后台看【功能使用】
一般正常的数据类似
【注意只能看昨日的数据 如果第一天使用不能看到当天的数据】
3.4. 友盟-自定义事件
//使用友盟发送一个表示事件的字符 串.
//计算事件 累计值
|