Commit dee56849 authored by Administrator's avatar Administrator

发布RatelEngine 1.3.8,支持访问模块布局文件

parent ca7c37aa
......@@ -196,3 +196,57 @@ value值不区分大小写~~
本配置仅对单个模块生效,所以只支持在manifest中配置,如果模块插件具有so,那么配置``moduleHasNativeCode=true``,之后插件加载方式将会设定加载插件中的so,无须考虑so适配问题。如果是embed模式打包,那么so会自动copy到外部,也无须考虑so适配问题。
请注意,如果你的模块需要加载so,你又没有配置这个参数,那么你需要hook System.loadLibary或者类似函数修正so地址
## 访问模块布局资源
如果你是模块开发者,希望能过在宿主App中增加页面元素,或者使用Material Design风格插入悬浮控制菜单。那么你需要有能力访问模块的布局资源。使用方式如下:
```
Context context = RatelToolKit.ratelResourceInterface.createContext(lpparam.modulePath, HookEntry.class.getClassLoader(), RatelToolKit.sContext);
FrameLayout frameLayout = (FrameLayout) activity.getWindow().getDecorView();
LayoutInflater.from(context).cloneInContext(context)
.inflate(R.layout.float_button, frameLayout);
```
核心API则是通过RatelApi创建Context,该Context将会使用指定apk文件作为底层资源。api描述如下:
```
/**
* 提供访问模块资源的功能,包括皮肤,字体,图片,布局等<br>
* 如果资源已经加载过,那么本接口返回的是缓存对象
*/
@RatelEngineVersion(RatelEngineHistory.V_1_3_8)
public interface RatelResourceInterface {
/**
* 以一个特定的apk创建一个Resource对象
*
* @param moduleApkPath apk路径,一般为模块apk地址。Ratel框架下,可以在模块入口得到模块地址: com.virjar.ratel.api.rposed.callbacks.RC_LoadPackage.LoadPackageParam#modulePath
* @param moduleClassLoader 指向这个apk的classloader
* @return resource对象
*/
Resources createResource(String moduleApkPath, ClassLoader moduleClassLoader);
/**
* 以一个特定的apk创建一个Context对象
*
* @param moduleApkPath apk路径,一般为模块apk地址。Ratel框架下,可以在模块入口得到模块地址: com.virjar.ratel.api.rposed.callbacks.RC_LoadPackage.LoadPackageParam#modulePath
* @param moduleClassLoader 指向这个apk的classloader,如果你不需要通过inflater创建view对象,classloader可以为空
* @param baseContext context需要有一个父context,创建的context仅仅替换资源相关环境
* @return context对象
*/
Context createContext(String moduleApkPath, ClassLoader moduleClassLoader, Context baseContext);
}
```
demo参见: http://git.virjar.com/ratel/ratel-demo/blob/master/crack-demoapp/src/main/java/com/virjar/ratel/demoapp/crack/HookEntry.java#L34
效果:
![floatingBotton](img/4_2_floatingBotton.jpg)
本demo使用 https://github.com/futuresimple/android-floating-action-button 实现悬浮控制按钮
特殊说明,在配置组建特有属性的时候,其namespace不能使用``http://schemas.android.com/apk/res-auto``,必须带有全称package。比如floatingAction的namespace声明:``xmlns:fab="http://schemas.android.com/apk/com.getbase.floatingactionbutton"``,否则自定义属性无法成功获取,报错:``Can't convert value at index 0 to color: type=0x5``
请注意,RatelEngine 1.3.8之后支持插件布局资源支持,且RatelApi需要升级到1.3.3
......@@ -50,6 +50,9 @@ ratelManager的apk,在ratel server的首页有下载地址
# 发布记录
## 引擎发布记录
### V1.3.8
1. [feature] 支持访问模块布局资源
### V1.3.7
1. [feature] HotModule,热发模块,可远程批量部署模块,便于集群管理
2. [improve] 修复Zelda引擎若干bug
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment