用户组 
易积分3753
热心0
好评16
|
E4A魔改版V1.5.2 兼容E4A6.9,并支持Android5.0以下dex分包保留魔改版特性
E4A更新6.9版本了可喜可贺
祝E4A越来越好
EA46.9版本去除了android-support-mutlidex,这样可以优化apk体积,但是无法兼容Android5.0以下版本的dex分包
此版本可从V1.5.1快速升级到6.9并保留魔改版所有特性和兼容Android5.0以下dex分包的安装包,也可以6.9直接覆盖安装,安装方法直接替换即可。
此版本已更新6.9,兼容6.9版本所有特性和魔改版所有特性
E4A6.9或者安装了V1.5.1版本,均可直接安装,原安装魔改版V1.5.1版本的覆盖后将可直接升级到6.9版本。
下载地址https://wwa.lanzoui.com/b0dkx1n7i
密码:fp14
发现一个bug该bug导致如果工程未引入超级事件监听器类库在Android4.4.2设备上会因为找不到类而崩溃,已经使用反射修复已经重新上传建议立即下载新版覆盖更新。
2021-06-15
忧愁的qq:2557594045
欢迎加入安卓开发交流群 970905285
欢迎加入忧愁类库开发交流群 1038857728
历史版本
版本V1.5
优化插件编译流程无需两次编译才能成功
优化编译体验不弹出插件做到无声编译具体可以在E4A\build.ini文件中配置即参考说明
支持分包dex,在方法数超过65536后会可以自动打包多个dex,E4A\multidex-config.txt为主dex中保留的类,注意数量不能超过64k,不懂请勿动。
可以选择是否编译发布版dex,E4A\build.ini,发布版dex编译时会优化掉堆栈轨迹和记录异常时会用到的一些信息,可能会找不到错误地方,建议调试时编译调试版dex而不是发布版,具体可查看配置文件注释。
优化编译器逻辑如发生错误会直接输出错误日志,可简单得了的看到具体的错误原因。
此版本无需手动打开编译插件,也不用手动打开插件,编译器内部会自行调用。
优化不是E4A的安装目录无法使用的问题
修复是否在前台方法始终返回假的bug
注意事项:
安装需要先安装原版6.8E4A然后替换原版的所有文件才行。
版本V1.4
主要更新内容:
jdk 1.7=>jdk1.8
sdk 23(android6.0)=>30(android11)
签名V1=>V1+V2
编译器dx=>d8
E4A的jdk和sdk版本相信大家都知道,使用java1.7,目前有大量java1.8的SDK支持库无法使用,SDK更是只有23(android6.0)导致大量的新api新无法使用,比如无障碍的手势操作,添加后将会导致无法成功编译R.java文件,无法调用androidx等新的Android支持库,此次更新将JDK更新到java1.8.0.181版本,sdk直达30(android11)处理好资源冲突等问题可以使用最新版的原生SDK,这将带来巨大的可扩展性支持,签名算法目前采用java的Signature工具进行v1签名,导致打包出来的apk安装速度慢,更新了v2签名后将显著提升新版安卓中apk的安装速度及apk安全性。
Android 7.0中引入了APK Signature Scheme v2,v1是jar Signature来自JDK。
V1:应该是通过ZIP条目进行验证,这样APK 签署后可进行许多修改 - 可以移动甚至重新压缩文件。
V2:验证压缩文件的所有字节,而不是单个 ZIP 条目,因此,在签名后无法再更改(包括 zipalign)。正因如此,现在在编译过程中,我们将压缩、调整和签署合并成一步完成。好处显而易见,更安全而且新的签名可缩短在设备上进行验证的时间(不需要费时地解压缩然后验证),从而加快应用安装速度。
注意事项:
1.更新java1.8后编译的类库都会自动基于java1.8,无法给使用java1.7的e4a使用,如必须用建议保留两个版本的e4a。
2.之前我的的动态权限工具在新版中可能会出现闪退的情况,可以找我拿新版。
3.清明查错工具无法用于新版,新的查错工具请等待后续版本发布。
4.关于无法找到R资源,编译器会自动唤醒插件中的编译插件,再次点击编译即可,也可以使用取资源索引方法。
版本V1.3
重写了e4a的事件管理者EventDispatcher在不影响原本事件正常流程的情况下配合超级事件监听器可以实现监听任意组件的任意事件,而不是像官方自带那样只能监听固定的几个
E4A的事件监听器相信大家应该都用过只是有一个很致命的问题,只能监听固定的那几个e4a官方自己带的组件的事件,其他第三方的一些类库都不能成功监听到。这样的话就很大的制约了e4a开发的自由度,经过对 e4a事件管理者EventDispatcher 的分析,对齐进行了修改后做出此魔改版+类库,经过仔细测试不会对原本e4a的事件派发产生影响。
下面分享一下我对e4a EventDispatcher 流程和实现原理的分析
EventDispatcher 一共有两个方法一个内部类,在可视页面添加一个控件或者写一个全局变量,那么e4a会自动生成代码对这个组件进行注册 调用这个方法registerEvent 它一共有三个参数Object object, String dataMemberName, String eventName 注册方法中 使用传入的这三个参数创建EventDispatcher.EventHandlerClosure 并添加到 private static Map<String, List<EventDispatcher.EventHandlerClosure>> registry = new HashMap();中在调用dispatchEvent派发事件方法后根据添加的eventName从 private static Map<String, List<EventDispatcher.EventHandlerClosure>> registry = new HashMap();查询事件名对应的List<EventDispatcher.EventHandlerClosure>
遍历List数据使用EventHandlerClosure的getDataMemberObject()通过反射获取到注册位置的变量,进行判断如果相等那么就调用相等对象invokeEvent对事件进行派发,EventHandlerClosure的构造方法中会先通过注册时传入的对象使用反射获取到class,判断该类中是否有对应的方法,如果有才会去给getDataMemberObject()中用到的对象赋值,否则也不会使用反射进行派发。
历史版本V1.2
将e4a sdk中的attr资源从23更新到了24使得部分属性可用
历史版本V1.1
1.增加可视组件公共方法 置显示位置(位置 为 单精度小数型) 为 空 ,可以设置可视组件的Z轴显示位置,此方法可以控制显示位置到底层,顶层,中间任意位置都可控制使用示例 标签1.置显示位置(100) 按钮1.置显示位置(0) 此方法参数为单精度小数型(float)任意可视组件都可调用。
注意此方法仅在Android SDK大于或者等于21(android5.0)使用才会生效
公共方法所有可视组件均可直接调用,不管是否在类库中写出声明注释
2.增加可视组件公共方法设 取显示位置() 为 单精度小数型 ,获取可视组件显示位置()返回单精度小数型(float)
此方法仅在Android SDK大于或者等于21(android5.0)使用才会生效
公共方法所有可视组件均可直接调用,不管是否在类库中写出声明注释
3.增加可视组件公共方法 到底层() 和到顶层一样使用将组件移动到底层,此方法和置显示位置并不冲突,到的是当前显示位置的最底层,并不会跨越 置显示位置设置的位置,简单来说如果没有调用 置显示位置 那么所有的组件都是在一个平面的到底层和顶层只是在这个平面中活动,而调用了置显示位置那么就会移动到指定的平面,哪怕你调用到顶层也只是到了当前平面的顶层,并不能直接覆盖更高平面的组件,未调用置显示位置的组件均为0.0,最低层。
4.增加可视组件公共方法 到底层1() 和到底层方法效果几乎一致,优化了性能,可能导致可视和不可视状态出现问题,是否使用自行衡量,部分场景仅可使用此方法所以添加。
公共方法所有可视组件均可直接调用,不管是否在类库中写出声明注释
5..增加可视组件公共方法 到顶层1() 和到顶层方法效果几乎一致,优化了性能,可能导致可视和不可视状态出现问题,是否使用自行衡量,部分场景仅可使用此方法所以添加。
公共方法所有可视组件均可直接调用,不管是否在类库中写出声明注释
/*
关于如何将view移动到底层这里开源一个很简单的方法顺便说一下遇到的坑关于移动到顶层直接调用View的bringToFront()方法即可,但是官方并没有提供与之相反的方法,这就很坑了,查了很久资料有人说可以使用View.setZ方法改变Z轴,但是此方法在Android5.0以后加入的,此前的Android版本都用不了,经过分析Android的源码发现最终调用了 ViewGroup的bringChildToFront方法,其中大致逻辑为removeFromArray方法先移除addInArray添加到最上方,然后调用 requestLayout(); invalidate();刷新,removeFromArray,和addInArray都是private不能直接调用我尝试过反射不过Android10测试无法反射,找不到方法java.lang.NoSuchMethodException,最后突然灵光一闪,想到了这个方法,经过测试可用,获取 ViewGroup,removeView(child)移除view然后 viewGroup.addView(child,0);第二个参数index 设置为0就是最底层。
public void sendToBack(View child) {
ViewGroup viewGroup= ((ViewGroup)child.getParent());
viewGroup.removeView(child);
viewGroup.addView(child,0);
}
*/
历史版本:
版本V1.0
1.增加 窗口.窗口焦点改变 事件,更方便的控制焦点,设置沉浸等用途。
事件 主窗口.窗口焦点改变(是否获得焦点 为 逻辑型 )
忧愁_沉浸工具1.一键沉浸4()
弹出提示(是否获得焦点)
结束 事件
2.增加 打开窗口方法 更简洁的切换窗口窗口
现在可以使用 打开窗口("容器窗口")这一行简单的代码
替换下面的代码了效果完全一致
如果 读取窗口("容器窗口")=空 则
保存窗口("容器窗口",创建 容器窗口)
结束 如果
切换窗口(读取窗口("容器窗口"))
3.增加常用方法取SDK版本
4.增加方法获取设备物理标识()
|
|