- Android插件化方案-RePlugin内置插件踩坑
霁逸lei
1.新建两个module,plugins和host,然后在project的build.gradle添加对应的依赖,可在同一个项目也可分两个项目,此处图省事丢到同一个projectclasspath'com.qihoo360.replugin:replugin-host-gradle:2.2.4'classpath'com.qihoo360.replugin:replugin-plugin-grad
- 360 Replugin 插件化 支持 Androidx和Java8
音乐小钢炮
Androidandroid
最近项目需求,需要将公司里面多个APP都融合在一起,所以来试试360插件框架,先贴源码和wiki连接https://github.com/Qihoo360/RePlugin/blob/dev/README_CN.md按照wiki上面的接入说明,很快,自己编写的Demo就能能运行了。想着也挺简单的。于是开始接入项目,问题接踵而至!1.如何适配Androidx官网给的接入版本如下classpath'c
- 记录一些文章
next_discover
https://www.jianshu.com/writer#/notebooks/1314604/notes/58690222|-写文章https://bintray.com/nextdiscover/replugin/sf-host-gradle|Packagesf-host-gradle-nextdiscoverhttps://www.jianshu.com/writer#/notebook
- 【Android知识笔记】插件化专题(二)
川峰
Android知识笔记android插件化RepluginHookClassLoader反射占坑Activity
在上一篇专题【Android知识笔记】插件化专题(一)中详细介绍了Android三种插件化方案的实现以及它们的优缺点对比总结等。这一篇中主要来看一下一些插件化开源框架的实现原理,当然市场上的插件化框架有很多,层出不穷,如DiDiVirtualApk、360Replugin等。本人在过去的工作经历中项目中实际应用过的就是Replugin,所以本篇主要分析Replugin的大概流程和核心实现原理。Re
- APK压缩方法总监思路
xiaobinZh
现在项目APK包太大,都已经达到50+M了,不仅仅下载慢,而且作为开发者编译,测试都要花费很多时间。因此想,有没有什么方法能优化下APK。从上而下的分析思路插件化,需要的时候时候再去下载,可以极大的减少APK大小。但是有一定技术难度,成熟的方案有,360RePlugin,VirtualAPK,Atlas等模块化,业务分模块开发,并且提供noop包,保证能编译,但是无太多代码。组件化,公用的功能抽取
- RePlugin 初体验
learner222
1.配置按照RePlugin文档对build.gradle进行配置之后,进行GradleSync,报错:Nosignatureofmethod:com.android.build.gradle.internal.scope.VariantScopeImpl.getMergeAssetsTask()isapplicableforargumenttypes:()values:[]问题原因:工程使用的G
- replugin分析博客
next_discover
https://witgao.com/android/RePlugin%E4%B9%8BHost%E8%BF%9B%E7%A8%8B%E5%90%AF%E5%8A%A8/replugin解析系列文章http://www.mianshigee.com/tutorial/RePlugin/e4634c748784f5e8.mdflutter最完整题库:https://juejin.im/post/5e
- Replugin 插件化集成手册
心愿_397d
集成步骤第1步:添加RePluginPluginGradle依赖在项目根目录的build.gradle(注意:不是app/build.gradle)中添加replugin-plugin-gradle依赖:buildscript{dependencies{classpath'com.qihoo360.replugin:replugin-plugin-gradle:2.3.3'}}第2步:添加RePl
- 360插件化方案RePlugin学习笔记-资源共享
皮卡搜
本来没写这个的,但是后来用的时候发现还是有坑的。一、使用“插件”的资源1.判断是否安装了“插件”,如果没有安装,先安装“插件”2.已安装“插件”,获取“插件”资源ID:(获取R.string.app_name为例)通过反射//获取“插件”加载类valclassLoader=RePlugin.fetchClassLoader("plugin1")//获取“插件”中values/strings.xml
- 360Relugin插件遇到问题汇总
心愿_397d
在开发Replugin插件时候遇到了很多的坑,当初都整理成了文档,现在年底正好有空闲时间,我都整理出来,看看小伙伴们都有遇到的没有:一、接入插件存在问题1、第一次启动插件过慢。2、如果安装没有启动,就直接卸载,有时候会报ANR(偶尔)3、安装外部插件:必须为apk的绝对路径。4、插件中使用SO库,需要在主程序中添加,对应的依赖库。5、android7.0共享权限等,需要在主程序的Manifest中
- Replugin插件化框架原理简介
猎羽
Android开源库androidreplugin插件化
转载请注明链接:https://blog.csdn.net/feather_wch/article/details/88148286Replugin插件化框架原理简介版本号:2019-03-11(23:05)文章目录Replugin插件化框架原理简介简介为什么需要插件化?导致插件化不稳定的根源在哪?如何解决不灵活的问题?大项目才使用插件化?Hook技术PathClassLoader的HookDex
- Replugin源码阅读-replugin-host-library
冉桓彬
1.replugin-host-gralde:宿主脚本2.replugin-host-library:宿主库3.replugin-plugin-gradle:插件脚本4.replugin-plugin-library:插件库打算从以上四个模块对replugin进行拆解阅读RePlugin的思想是HookClassLoader,因此接下来就围绕ClassLoader进行分析一、流程总结1.1插件的安
- Replugin编译时期注入流程
做实事的人
Replugin编译时期注入流程ReClassTransform核心了解过Replugin框架的都知道编译时期会改动一些代码,比如Activity动态替换,那么来详细了解一下流程目标:熟悉每一个细节流程,并更根据自己的需求改动。或则能自己实现一下更好。@Overridevoidtransform(Contextcontext,Collectioninputs,Collectionreference
- replugin宿主与插件通信小结
凉亭下
Android面试androidandroidstudioide
近来replugin开发中遇到宿主和插件间需要通信的情形,思来只有进程间通信(IPC)才是比较好的宿主与插件的通信方式。而Android进程间通信主要有2种方式:Messenger和AIDL。AIDL(AndroidInterfaceDefinitionLanguage)是Android接口定义语言。AIDL设计用于实现Android进程间通信。Android中每个进程都拥有自己的Dalvik虚拟
- replugin原理笔记
凉亭下
Android面试笔记androidgradle
Replugin源码目录主要有4个工程组成,其组成如下图所示,包括2个gradle工程,2个Androidlibrary工程。replugin-host-gradlereplugin-host-libraryreplugin-plugin-gradlereplugin-plugin-libraryReplugin是一套完整的、稳定的、适合全面使用的,占坑类插件化方案。Replugin的hook点只
- Replugin实践记录
15130140362
androidjava开发语言
Replugin实践记录分享:开源框架不能随便使用,Replugin框架年久失修,参考实现学习实现原理可以,但是如果直接使用到项目中后期维护适配成本太大,直接使用请慎重。官方链接:https://github.com/Qihoo360/RePluginReplugin官网提供了详细的使用教程和原理以及demo,demo里面有很多事例,可以参考学习。自己跑replugin官方提供的demo,搞了半天
- Android 插件化小结
guangdeshishe
Android架构设计androidjavaandroidstudio
Android插件化小结简介插件化可以用于让apk不经过安装而运行起来,将一些不常用的模块做成插件,当需要用到时再下载运行,这可以减小主app安装包的大小,在开发过程中也可以单独调试某个插件模块,避免整个项目太大编译运行太慢问题;常见的插件化框架有:dynamic-load-apk、VirtualApp、RePlugin、shadow等实现原理插件化的实现主要需要解决以下几个问题:插件apk中类的
- 插件框架-RePlugin源码阅读
河里的枇杷树
写在前面==如果时间有限可以直接跳到最下面的核心问题==*插件化现状插件化目前的处境肯定是大不如前,由于android系统逐步完善收紧各种黑科技很难再爆发,各个插件化逐步从爆发大量黑科技到追求稳定性,再加之小程序的产生。让大厂很多合作直接使用小程序,而不再使用插件化.不过对于中小公司没有小程序能力的,插件化不失为一种比较好的动态化方案。*为什么阅读RePlugin的源码对比了VirtualApk和
- Android组件化开发
Mr_Duoduo
移动开发Android组件化开发android移动开发java
教你打造一个Android组件化开发框架CC:ComponentCaller,一个android组件化开发框架,已开源。github地址:https://github.com/luckybilly/CC本文主要讲解框架实现原理,如果只是想了解一下如何使用,可直接到github上查看README文档前言首先说明一下,本文将讲述的组件化与业内的插件化(如:Atlas,RePlugin等)不是同一个概念
- Android插件化系列一:Binder机制,ClassLoader
要早点睡
系列前言从今天开始,我会花较多的时间来跟大家一起学习Android插件化。这一篇文章是Android插件化的启动篇。Android插件化是之前几年里的一个很火的技术概念。从2012年开始就有人在研究这门技术。从粗糙的AndroidDynamicLoader框架,到第一代的DroidPlugin等,继而发展到第二代的VirtualApk,Replugin等,再到现如今的VirtualApp,Atla
- replugin原理笔记
神迹12
Replugin源码目录主要有4个工程组成,其组成如下图所示,包括2个gradle工程,2个Androidlibrary工程。replugin-host-gradlereplugin-host-libraryreplugin-plugin-gradlereplugin-plugin-libraryReplugin是一套完整的、稳定的、适合全面使用的,占坑类插件化方案。Replugin的hook点只
- 热修复和插件化方案
豪世_世界的世
1.插件化方案阿里atlas360DroidPlugin360RePlugin携程DynamicApk滴滴VirtualAPK任玉刚DynamicLoadApkAndroidDynamicLoaderSmall2.热修复方案阿里系AndFixdexposedSophix腾讯系微信tinkerQQ空间的超级补丁手机QQ的QFix其他饿了吗Amigo美团RobustAcesoNuwaRocooFix
- 重复导jar包导致com.android.builder.dexing.DexArchiveMergerException
Singal11
最近在用RePlugin框架开发插件应用,由于插件化开发需要把应用拆分成多个工程,每个工程都会用到一些工具类,于是我把通用的工具类打成了jar包。研究了一番gradle如何打包jar之后,jar包打好了,一用就出问题了,报了个"com.android.builder.dexing.DexArchiveMergerException"异常。报错如下:Executionfailedfortask':a
- Replugin 升级androidx 后 报找不到Activity
亮亮_be3c
Unabletofindexplicitactivityclass{包名/..MoreEditActivity};haveyoudeclaredthisactivityinyourAndroidManifest.xml场景是Fragment里面直接调用startActicity(..)的方法,这个方法replugin没有拦截成功,不能替换坑位,将startActicity(..)改为getActi
- RePlugin之Hook ClassLoader
涛桑_
OneHookRePlugin仅通过hook一个地方来改变ClassLoader的加载方式,使得加载Class时先寻找所有插件是否有该Class,没有之后才去执行原本ClassLoaderRepluginClassLoader@OverrideprotectedClassloadClass(StringclassName,booleanresolve)throwsClassNotFoundExce
- RePlugin之Activity启动流程
涛桑_
前面我们了解了RePlugin插件化的基础,Hook和坑位在使用插件中的Activity时,我们这样做的RePlugin.startActivity(MainActivity.this,RePlugin.createIntent("app-debug","com.example.lib.SecondActivity"));按照这种使用方式我们递归下去分析Replugin.startActivity
- 浅谈Android插件化
weixin_47143210
javaandroidpython编程语言移动开发
插件化,一个陌生有熟悉的名词,从我们学习Android伊始,总能隐约听到关于它的消息,从360的RePlugin,到DiDi的VirtualAPK更新换代,再到TencentShadow横空出世,可以说插件化已经从一个剑走偏锋的黑科技,蜕变成了独步天下的高级技能,其中蕴含的各种思想和变化,也成了考核高级开发工程师无法避开的++障碍++,今天我们就来简单的说一下这些『高深』的技术。1.什么是插件化插
- 阿里巴巴架构师首发,插件化学习笔记,深入理解Android插件化技术
程序员一东
androidjavaapache
背景在Android开发行业里,插件化已经不是一门新鲜的技术了,在稍大的平台型App上早已是标配。进入2017年,Atlas、Replugin、VirtualAPK相继开源,标志着插件化技术进入了成熟阶段。但纵观各大插件框架,都是基于自身App的业务来开发的,目标或多或少都有区别,所以很难有一个插件框架能一统江湖解决所有问题。首先,你须要知道什么是插件化开发。就拿最常见的QQ来说,在第三个界面动态
- Android插件化原理(一):插件类的加载
_zhqy
Android插件化系列Android插件化
插件化概述 插件化技术最初源于免安装运行apk的想法,这个免安装的apk可以理解为插件。支持插件化的app可以在运行时加载和运行插件,这样便可以将app中一些不常用的功能模块做成插件,一方面减小了安装包的大小,另一方面可以实现app功能的动态扩展。插件化从最开始提出至今已经发展的非常成熟了,也涌现出了非常多的开源框架,从最开始的Dynamic-load-apk到后来比较有名的RePlugin、V
- replugin 判断插件是否安装成功
亮亮_be3c
360插件里面的类RePluginCallbacks的onPluginNotExistsForActivity方法可以获取未安装的插件名。image.png通过获取插件的状态PluginStatusController.getStatus(plugin)来判断publicclassHostRePluginCallbacksextendsRePluginCallbacks{privatestatic
- mondb入手
木zi_鸣
mongodb
windows 启动mongodb 编写bat文件,
mongod --dbpath D:\software\MongoDBDATA
mongod --help 查询各种配置
配置在mongob
打开批处理,即可启动,27017原生端口,shell操作监控端口 扩展28017,web端操作端口
启动配置文件配置,
数据更灵活 
- 大型高并发高负载网站的系统架构
bijian1013
高并发负载均衡
扩展Web应用程序
一.概念
简单的来说,如果一个系统可扩展,那么你可以通过扩展来提供系统的性能。这代表着系统能够容纳更高的负载、更大的数据集,并且系统是可维护的。扩展和语言、某项具体的技术都是无关的。扩展可以分为两种:
1.
- DISPLAY变量和xhost(原创)
czmmiao
display
DISPLAY
在Linux/Unix类操作系统上, DISPLAY用来设置将图形显示到何处. 直接登陆图形界面或者登陆命令行界面后使用startx启动图形, DISPLAY环境变量将自动设置为:0:0, 此时可以打开终端, 输出图形程序的名称(比如xclock)来启动程序, 图形将显示在本地窗口上, 在终端上输入printenv查看当前环境变量, 输出结果中有如下内容:DISPLAY=:0.0
- 获取B/S客户端IP
周凡杨
java编程jspWeb浏览器
最近想写个B/S架构的聊天系统,因为以前做过C/S架构的QQ聊天系统,所以对于Socket通信编程只是一个巩固。对于C/S架构的聊天系统,由于存在客户端Java应用,所以直接在代码中获取客户端的IP,应用的方法为:
String ip = InetAddress.getLocalHost().getHostAddress();
然而对于WEB
- 浅谈类和对象
朱辉辉33
编程
类是对一类事物的总称,对象是描述一个物体的特征,类是对象的抽象。简单来说,类是抽象的,不占用内存,对象是具体的,
占用存储空间。
类是由属性和方法构成的,基本格式是public class 类名{
//定义属性
private/public 数据类型 属性名;
//定义方法
publ
- android activity与viewpager+fragment的生命周期问题
肆无忌惮_
viewpager
有一个Activity里面是ViewPager,ViewPager里面放了两个Fragment。
第一次进入这个Activity。开启了服务,并在onResume方法中绑定服务后,对Service进行了一定的初始化,其中调用了Fragment中的一个属性。
super.onResume();
bindService(intent, conn, BIND_AUTO_CREATE);
- base64Encode对图片进行编码
843977358
base64图片encoder
/**
* 对图片进行base64encoder编码
*
* @author mrZhang
* @param path
* @return
*/
public static String encodeImage(String path) {
BASE64Encoder encoder = null;
byte[] b = null;
I
- Request Header简介
aigo
servlet
当一个客户端(通常是浏览器)向Web服务器发送一个请求是,它要发送一个请求的命令行,一般是GET或POST命令,当发送POST命令时,它还必须向服务器发送一个叫“Content-Length”的请求头(Request Header) 用以指明请求数据的长度,除了Content-Length之外,它还可以向服务器发送其它一些Headers,如:
- HttpClient4.3 创建SSL协议的HttpClient对象
alleni123
httpclient爬虫ssl
public class HttpClientUtils
{
public static CloseableHttpClient createSSLClientDefault(CookieStore cookies){
SSLContext sslContext=null;
try
{
sslContext=new SSLContextBuilder().l
- java取反 -右移-左移-无符号右移的探讨
百合不是茶
位运算符 位移
取反:
在二进制中第一位,1表示符数,0表示正数
byte a = -1;
原码:10000001
反码:11111110
补码:11111111
//异或: 00000000
byte b = -2;
原码:10000010
反码:11111101
补码:11111110
//异或: 00000001
- java多线程join的作用与用法
bijian1013
java多线程
对于JAVA的join,JDK 是这样说的:join public final void join (long millis )throws InterruptedException Waits at most millis milliseconds for this thread to die. A timeout of 0 means t
- Java发送http请求(get 与post方法请求)
bijian1013
javaspring
PostRequest.java
package com.bijian.study;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURL
- 【Struts2二】struts.xml中package下的action配置项默认值
bit1129
struts.xml
在第一部份,定义了struts.xml文件,如下所示:
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts
- 【Kafka十三】Kafka Simple Consumer
bit1129
simple
代码中关于Host和Port是割裂开的,这会导致单机环境下的伪分布式Kafka集群环境下,这个例子没法运行。
实际情况是需要将host和port绑定到一起,
package kafka.examples.lowlevel;
import kafka.api.FetchRequest;
import kafka.api.FetchRequestBuilder;
impo
- nodejs学习api
ronin47
nodejs api
NodeJS基础 什么是NodeJS
JS是脚本语言,脚本语言都需要一个解析器才能运行。对于写在HTML页面里的JS,浏览器充当了解析器的角色。而对于需要独立运行的JS,NodeJS就是一个解析器。
每一种解析器都是一个运行环境,不但允许JS定义各种数据结构,进行各种计算,还允许JS使用运行环境提供的内置对象和方法做一些事情。例如运行在浏览器中的JS的用途是操作DOM,浏览器就提供了docum
- java-64.寻找第N个丑数
bylijinnan
java
public class UglyNumber {
/**
* 64.查找第N个丑数
具体思路可参考 [url] http://zhedahht.blog.163.com/blog/static/2541117420094245366965/[/url]
*
题目:我们把只包含因子
2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14
- 二维数组(矩阵)对角线输出
bylijinnan
二维数组
/**
二维数组 对角线输出 两个方向
例如对于数组:
{ 1, 2, 3, 4 },
{ 5, 6, 7, 8 },
{ 9, 10, 11, 12 },
{ 13, 14, 15, 16 },
slash方向输出:
1
5 2
9 6 3
13 10 7 4
14 11 8
15 12
16
backslash输出:
4
3
- [JWFD开源工作流设计]工作流跳跃模式开发关键点(今日更新)
comsci
工作流
既然是做开源软件的,我们的宗旨就是给大家分享设计和代码,那么现在我就用很简单扼要的语言来透露这个跳跃模式的设计原理
大家如果用过JWFD的ARC-自动运行控制器,或者看过代码,应该知道在ARC算法模块中有一个函数叫做SAN(),这个函数就是ARC的核心控制器,要实现跳跃模式,在SAN函数中一定要对LN链表数据结构进行操作,首先写一段代码,把
- redis常见使用
cuityang
redis常见使用
redis 通常被认为是一个数据结构服务器,主要是因为其有着丰富的数据结构 strings、map、 list、sets、 sorted sets
引入jar包 jedis-2.1.0.jar (本文下方提供下载)
package redistest;
import redis.clients.jedis.Jedis;
public class Listtest
- 配置多个redis
dalan_123
redis
配置多个redis客户端
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi=&quo
- attrib命令
dcj3sjt126com
attr
attrib指令用于修改文件的属性.文件的常见属性有:只读.存档.隐藏和系统.
只读属性是指文件只可以做读的操作.不能对文件进行写的操作.就是文件的写保护.
存档属性是用来标记文件改动的.即在上一次备份后文件有所改动.一些备份软件在备份的时候会只去备份带有存档属性的文件.
- Yii使用公共函数
dcj3sjt126com
yii
在网站项目中,没必要把公用的函数写成一个工具类,有时候面向过程其实更方便。 在入口文件index.php里添加 require_once('protected/function.php'); 即可对其引用,成为公用的函数集合。 function.php如下:
<?php /** * This is the shortcut to D
- linux 系统资源的查看(free、uname、uptime、netstat)
eksliang
netstatlinux unamelinux uptimelinux free
linux 系统资源的查看
转载请出自出处:http://eksliang.iteye.com/blog/2167081
http://eksliang.iteye.com 一、free查看内存的使用情况
语法如下:
free [-b][-k][-m][-g] [-t]
参数含义
-b:直接输入free时,显示的单位是kb我们可以使用b(bytes),m
- JAVA的位操作符
greemranqq
位运算JAVA位移<<>>>
最近几种进制,加上各种位操作符,发现都比较模糊,不能完全掌握,这里就再熟悉熟悉。
1.按位操作符 :
按位操作符是用来操作基本数据类型中的单个bit,即二进制位,会对两个参数执行布尔代数运算,获得结果。
与(&)运算:
1&1 = 1, 1&0 = 0, 0&0 &
- Web前段学习网站
ihuning
Web
Web前段学习网站
菜鸟学习:http://www.w3cschool.cc/
JQuery中文网:http://www.jquerycn.cn/
内存溢出:http://outofmemory.cn/#csdn.blog
http://www.icoolxue.com/
http://www.jikexue
- 强强联合:FluxBB 作者加盟 Flarum
justjavac
r
原文:FluxBB Joins Forces With Flarum作者:Toby Zerner译文:强强联合:FluxBB 作者加盟 Flarum译者:justjavac
FluxBB 是一个快速、轻量级论坛软件,它的开发者是一名德国的 PHP 天才 Franz Liedke。FluxBB 的下一个版本(2.0)将被完全重写,并已经开发了一段时间。FluxBB 看起来非常有前途的,
- java统计在线人数(session存储信息的)
macroli
javaWeb
这篇日志是我写的第三次了 前两次都发布失败!郁闷极了!
由于在web开发中常常用到这一部分所以在此记录一下,呵呵,就到备忘录了!
我对于登录信息时使用session存储的,所以我这里是通过实现HttpSessionAttributeListener这个接口完成的。
1、实现接口类,在web.xml文件中配置监听类,从而可以使该类完成其工作。
public class Ses
- bootstrp carousel初体验 快速构建图片播放
qiaolevip
每天进步一点点学习永无止境bootstrap纵观千象
img{
border: 1px solid white;
box-shadow: 2px 2px 12px #333;
_width: expression(this.width > 600 ? "600px" : this.width + "px");
_height: expression(this.width &
- SparkSQL读取HBase数据,通过自定义外部数据源
superlxw1234
sparksparksqlsparksql读取hbasesparksql外部数据源
关键字:SparkSQL读取HBase、SparkSQL自定义外部数据源
前面文章介绍了SparSQL通过Hive操作HBase表。
SparkSQL从1.2开始支持自定义外部数据源(External DataSource),这样就可以通过API接口来实现自己的外部数据源。这里基于Spark1.4.0,简单介绍SparkSQL自定义外部数据源,访
- Spring Boot 1.3.0.M1发布
wiselyman
spring boot
Spring Boot 1.3.0.M1于6.12日发布,现在可以从Spring milestone repository下载。这个版本是基于Spring Framework 4.2.0.RC1,并在Spring Boot 1.2之上提供了大量的新特性improvements and new features。主要包含以下:
1.提供一个新的sprin