Project Name | Stars | Downloads | Repos Using This | Packages Using This | Most Recent Commit | Total Releases | Latest Release | Open Issues | License | Language |
---|---|---|---|---|---|---|---|---|---|---|
Mxflutter | 2,679 | 2 years ago | 4 | May 18, 2020 | 5 | other | Dart | |||
基于JavaScript 的Flutter框架 mxflutter | ||||||||||
Rocoofix | 1,557 | 7 years ago | 51 | mit | Java | |||||
another hotfix framework | ||||||||||
Np Manager | 262 | 2 months ago | 3 | |||||||
Apk控制流混淆;Apk-Dex2C;Res资源混淆;Dex、jar、smali文件的相互转换; Dex、Pdf文件合并; Apk、dex、jar混淆和字符串加密; Apk签名、共存、去除签名校验、对话框取消、去除VPN/代理检测; Res资源混淆; Dex、AXML、ARSC文件编辑;字符串加密(Apk、dex); 一键添加Xposed检测,一键添加弹窗、对话框; axml反编译/回编译; 一键LOG注入,一键去除所有弹窗(Toast); 一键注入字符串解密LOG,Dex文件换包名; 一键添加禁止截屏,一键添加Apk崩溃日志记录; Apk超级混淆3.0--高效率直接对dex混淆,支持混淆四大组件,支持多dex; Apk功能--DEX混淆对抗;屏幕取色器;屏幕标尺。 | ||||||||||
Mvvmarchitecture | 147 | 2 years ago | apache-2.0 | Kotlin | ||||||
MVVM 框架,采用 Kotlin+Jetpack,可自由配置功能,欢迎 star,fork,issue | ||||||||||
Mobileinsight Mobile | 59 | a year ago | 20 | other | Python | |||||
Mobile Network Intelligence Made Easy -- Android version of MobileInsight app | ||||||||||
Mobileinsight Dev | 5 | 3 years ago | 1 | apache-2.0 | ||||||
Automated Deployment for MobileInsight Development Environment | ||||||||||
Nomoats | 3 | 3 years ago | gpl-3.0 | JavaScript | ||||||
System for capturing Android traffic and labeling it with the 3rd party library responsbile | ||||||||||
Mkali | 3 | 5 years ago | mit | Python | ||||||
wrapper around alpinelinux/alpine-make-vm-image |
Another hotfix framework
新写了一个框架原理与美团robust框架类似,具体看这里:AnoleFix
之前的HotFix项目太过简单,也有很多同学用Nuwa遇到很多问题,作者也不再修复,所以重新构建了一套工具。
com.android.tools.build:gradle:1.3.0
->com.android.tools.build:gradle:2.1.2
(解决了Nuwa 这个issue)hash.txt
和mapping.txt
文件的生成和保存public class RocooApplication extends Application {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
//初始化
RocooFix.init(this);
}
}
//方案1:静态启用,一般在Application里加载补丁
/**
* 从Assets里取出补丁,一般用于测试
*
* @param context
* @param assetName
*/
RocooFix.initPathFromAssets(Context context, String assetName);
/**
* 从指定目录加载补丁
* @param context
* @param dexPath
*/
RocooFix.applyPatch(Context context, String dexPath);
//方案2:动态打补丁,立即生效,有性能问题,适用于补丁方法数较少的情况,建议在ART虚拟机里启用该模式
/**
* 从Asset里加载补丁,一般用于本地测试
* @param context
* @param assetName
*/
RocooFix.initPathFromAssetsRuntime(Context context, String assetName) ;
/**
* 从指定目录加载补丁
* @param context
* @param dexPath
*/
RocooFix.applyPatchRuntime(Context context, String dexPath) ;
/**
*
* new Feature beta 中
* 从指定目录加载so补丁,使用so还需调用System.loadLibrary("xx")
* @param context
* @param soDirPath so补丁路径(这里是dir)
*/
RocooSoFix.applyPatch(Context context, String soDirPath);
1 在root的build.gradle
增加如下内容:
repositories {
jcenter()
}
dependencies {
classpath 'com.dodola:rocoofix:1.2.6’
}
2 在你项目的build.gradle
文件里添加如下配置
apply plugin: 'com.dodola.rocoofix'
repositories {
jcenter()
}
rocoo_fix {
includePackage = ['com/dodola/rocoosample']//指定将来可能需要制作补丁的package(就是指定插庄的范围)
excludeClass = ['BaseApplication.class']//将不需要加到patch里的类写在这里(不需要插庄的类)
preVersionPath = '1'//注意:此项属性只在需要制作补丁的时候才需开启!!如果不需要制作补丁则需要去掉此项
enable = true//注意:关掉此项会无法生成Hash.txt文件
scanref=true//默认为 false,开启这个选项会将与补丁 class 相引用的 class 都打入包中来解决 ART 虚拟机崩溃问题,功能 Beta 中
}
dependencies {
compile 'com.dodola:rocoo:1.1'
}
这里主要介绍一下preVersionPath
这个属性的作用。
rocoo_fix
将制作补丁的步骤透明化,用户无需手动备份hash.txt文件,插件会自动根据当前的versionCode
生成hash.txt
和mapping.txt
文件到指定目录,比如:
上一个版本发布的时候版本号是1
,那么生成的文件会放在app源码目录/rocooFix/version1/[debug]|[release]
的目录下,如果需要制作补丁那么在配置里指定preVersionPath
属性,它的值是上一个版本的版本号,这里的值是1
,
然后将build.gradle
的versionCode
的号码修改,这里修改成2
,只要和之前的版本不同就可以,没有具体值的要求
-keep class com.dodola.rocoofix.** {*;}
-keep class com.lody.legend.** {*;}
-keepclassmembers class com.dodola.rocoosample.** {
public <init>();//保留init,和include package保持一致
}
下面演示一下使用项目demo生成补丁的制作过程
1 假如我们需要打补丁的文件是
package com.dodola.rocoosample;
public class HelloHack {
public String showHello() {
return "hello world";
}
}
此时build.gradle
里的VersionCode
是1
2 运行一次应用,这时会在app
的目录下生成如下文件:
这里可以看做是我们已经发布版本的hash.txt
3 假设我们需要修复步骤1 里的showHello
方法,修改如下:
package com.dodola.rocoosample;
public class HelloHack {
public String showHello() {
return "hello Hack";//此处修复,补丁加载后该方法返回hello hack
}
}
4 修改build.gradle 文件里rocoo_fix
项,让其执行patch 的task,配置如下
rocoo_fix {
preVersionPath = '1'//注意:这里指定的是需要打补丁的VersionCode
enable = true
}
5 修改当前项目的versionCode
为2
,说明这个是一个升级fix版本。
6 正常发布应用,此时会在下图所示的路径中生成补丁文件:
7 我们可以反编译apk来确认插庄是否成功