版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】Android插件化之RePlugin项目怎么用
1.什么是RePlugin?2.RePlugin有什么用?3.RePlugin官方介绍一、集成主工程buildscript
{
repositories
{
jcenter()
}
dependencies
{
classpath
'com.android.tools.build:gradle:2.3.3'
//
1、添加RePlugin
Host
Gradle依赖
classpath
'com.qihoo360.replugin:replugin-host-gradle:2.2.1'
}
}android
{
compileSdkVersion
26
buildToolsVersion
"26.0.1"
defaultConfig
{
applicationId
"cn.codingblock.repluginstudy"
minSdkVersion
21
targetSdkVersion
26
versionCode
1
versionName
"1.0"
testInstrumentationRunner
"android.support.test.runner.AndroidJUnitRunner"
}
buildTypes
{
release
{
minifyEnabled
false
proguardFiles
getDefaultProguardFile('proguard-android.txt'),
''
}
}
}
apply
plugin:
'replugin-host-gradle'//
集成
RePlugin
添加的配置
//
集成
RePlugin
添加的配置
repluginHostConfig
{
useAppCompat
=
true
//
如果项目需要支持
AppComat,则需要将此配置置为
true
//
如果应用需要个性化配置坑位数量,则需要添加以下代码进行配置
//
countNotTranslucentStandard
=
6
//
countNotTranslucentSingleTop
=
2
//
countNotTranslucentSingleTask
=
3
//
countNotTranslucentSingleInstance
=
2
}
dependencies
{
compile
fileTree(dir:
'libs',
include:
['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2',
{
exclude
group:
'com.android.support',
module:
'support-annotations'
})
compile
'com.android.support:appcompat-v7:26.+'
compile
'com.android.support.constraint:constraint-layout:1.0.2'
compile
'com.qihoo360.replugin:replugin-host-lib:2.2.1'
//
集成
RePlugin
添加的配置
testCompile
'junit:junit:4.12'
}countNotTranslucentStandard
=
6
countNotTranslucentSingleTop
=
2
countNotTranslucentSingleTask
=
3
countNotTranslucentSingleInstance
=
2public
class
MyApplication
extends
RePluginApplication
{
}public
class
MyApplication
extends
Application
{
@Override
protected
void
attachBaseContext(Context
base)
{
super.attachBaseContext(base);
RePlugin.App.attachBaseContext(this);
}
@Override
public
void
onCreate()
{
super.onCreate();
RePlugin.App.onCreate();
}
@Override
public
void
onLowMemory()
{
super.onLowMemory();
RePlugin.App.onLowMemory();
}
@Override
public
void
onTrimMemory(int
level)
{
super.onTrimMemory(level);
RePlugin.App.onTrimMemory(level);
}
@Override
public
void
onConfigurationChanged(Configuration
newConfig)
{
super.onConfigurationChanged(newConfig);
RePlugin.App.onConfigurationChanged(newConfig);
}
}二、集成插件buildscript
{
repositories
{
jcenter()
}
dependencies
{
classpath
'com.android.tools.build:gradle:2.3.3'
//
1、添加RePlugin
Host
Gradle依赖(主工程用)
classpath
'com.qihoo360.replugin:replugin-host-gradle:2.2.1'
//
2、添加RePlugin
Plugin
Gradle依赖(插件工程用)
classpath
'com.qihoo360.replugin:replugin-plugin-gradle:2.2.1'
}
}apply
plugin:
'com.android.application'
android
{
...
}
apply
plugin:
'replugin-plugin-gradle'
//
集成
RePlugin
添加的配置
dependencies
{
compile
fileTree(dir:
'libs',
include:
['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2',
{
exclude
group:
'com.android.support',
module:
'support-annotations'
})
compile
'com.android.support:appcompat-v7:26.+'
compile
'com.android.support.constraint:constraint-layout:1.0.2'
compile
'com.qihoo360.replugin:replugin-plugin-lib:2.2.1'
//
集成
RePlugin
添加的配置
testCompile
'junit:junit:4.12'
}三、管理插件PluginInfo
pluginInfo
=
RePlugin.install(Environment.getExternalStorageDirectory().getPath().toString()
+
"/plugin1.apk");
System.out.println(pluginInfo);/**
*
创建一个用来定向到插件组件的Intent
<p>
*
<p>
*
推荐用法:
<p>
*
<code>
*
Intent
in
=
RePlugin.createIntent("clean",
"com.qihoo360.mobilesafe.clean.CleanActivity");
*
</code>
<p>
*
当然,也可以用标准的Android创建方法:
<p>
*
<code>
*
Intent
in
=
new
Intent();
<p>
*
in.setComponent(new
ComponentName("clean",
"com.qihoo360.mobilesafe.clean.CleanActivity"));
*
</code>
*
*
@param
pluginName
插件名
*
@param
cls
目标全名
*
@return
可以被RePlugin识别的Intent
*
@since
1.0.0
*/
public
static
Intent
createIntent(String
pluginName,
String
cls)
{
Intent
in
=
new
Intent();
in.setComponent(createComponentName(pluginName,
cls));
return
in;
}
/**
*
开启一个插件的Activity
<p>
*
其中Intent的ComponentName的Key应为插件名(而不是包名),可使用createIntent方法来创建Intent对象
*
*
@param
context
Context对象
*
@param
intent
要打开Activity的Intent,其中ComponentName的Key必须为插件名
*
@return
插件Activity是否被成功打开?
*
FIXME
是否需要Exception来做?
*
@see
#createIntent(String,
String)
*
@since
1.0.0
*/
public
static
boolean
startActivity(Context
context,
Intent
intent)
{
//
TODO
先用旧的开启Activity方案,以后再优化
ComponentName
cn
=
intent.getComponent();
if
(cn
==
null)
{
//
TODO
需要支持Action方案
return
false;
}
String
plugin
=
cn.getPackageName();
String
cls
=
cn.getClassName();
return
Factory.startActivityWithNoInjectCN(context,
intent,
plugin,
cls,
IPluginManager.PROCESS_AUTO);
}Intent
intent
=
RePlugin.createIntent("Plugin1",
"cn.codingblock.plugin1.MainActivity");
if
(!RePlugin.startActivity(MainActivity.this,
intent))
{
Toast.makeText(mContext,
"启动失败",
Toast.LENGTH_LONG).show();
}10-30
16:21:02.464
20280-20280/cn.codingblock.repluginstudy
D/RePlugin.ws001:
start
activity:
intent=Intent
{
cmp=Plugin1/cn.codingblock.plugin1.MainActivity
}
plugin=Plugin1
activity=cn.codingblock.plugin1.MainActivity
process=-2147483648
10-30
16:21:02.464
20280-20280/cn.codingblock.repluginstudy
D/RePlugin.ws001:
start
activity:
intent=Intent
{
cmp=Plugin1/cn.codingblock.plugin1.MainActivity
}
plugin=Plugin1
activity=cn.codingblock.plugin1.MainActivity
process=-2147483648
download=true
10-30
16:21:02.464
20280-20280/cn.codingblock.repluginstudy
D/RePlugin.ws001:
plugin=Plugin1
not
found,
start
download
...
10-30
16:21:02.469
20280-20280/cn.codingblock.repluginstudy
D/RePlugin.ws001:
isNeedToDownload():
V5
file
not
exists.
Plugin
=
Plugin1卸载插件RePlugin.uninstall("Plugin1");10-30
16:31:21.988
5006-5006/cn.codingblock.repluginstudy
D/RePlugin.ws001:
MP.pluginUninstall
...
pluginName=Plugin1
10-30
16:31:21.988
5006-5006/cn.codingblock.repluginstudy
D/RePlugin.ws001:
Not
installed.
pluginName=Plugin110-30
16:41:46.179
10193-10193/cn.codingblock.repluginstudy
D/RePlugin.ws001:
MP.pluginUninstall
...
pluginName=cn.codingblock.plugin1
10-30
16:41:46.202
10193-10193/cn.codingblock.repluginstudy
D/RePlugin.ws001:
sendIntent
pr=cn.codingblock.repluginstudy
intent=Intent
{
act=ACTION_UNINSTALL_PLUGIN
(has
extras)
}
10-30
16:41:46.203
10193-10193/cn.codingblock.repluginstudy
D/RePlugin.ws001:
Clear
plugin
cache.
pn=cn.codingblock.plugin1
10-30
16:41:46.204
10193-10193/cn.codingblock.repluginstudy
D/Re
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026济南能源集团春季校园招聘11人备考题库附参考答案详解(轻巧夺冠)
- 2026黑龙江哈尔滨工业大学电气工程及自动化学院现代电子技术研究所招聘备考题库及答案详解(名校卷)
- 2026四川省医医学验光配镜眼镜有限公司招聘4人备考题库含答案详解(达标题)
- 2026山东济南市中心医院招聘博士研究生(控制总量)70人备考题库带答案详解(黄金题型)
- 2026河南省中州服饰有限公司招聘备考题库【含答案详解】
- 2026济南能源集团春季校园招聘11人备考题库含答案详解(达标题)
- 2026中共衢州市委党校引进高层次紧缺人才2人备考题库(浙江)及答案详解(全优)
- 2026山东菏泽宋江武校招聘备考题库附参考答案详解(b卷)
- 2026贵州黔东南州食品药品检测中心招聘4人备考题库带答案详解
- 2026海南海口市秀英区疾病预防控制中心招聘事业编制人员9人备考题库【含答案详解】
- 国开2026年《公共政策概论》形成性考核任务1-4答案
- 2026贵州贵阳经济开发区招聘工作人员20名考试参考题库及答案解析
- 云南省西南名校联盟2026届高三下学期3月联考语文试卷(含答案)
- 2026年山西运城农业职业技术学院单招综合素质考试题库含答案详细解析
- 2025年10月自考13658工业设计史论试题及答案
- 《大学信息技术》教学课件-大学信息技术第一章
- 肝性脑病的疾病查房课件
- 超声科晋升副高(正高)职称病例分析专题报告(超声诊断胎儿隔离肺病例分析)
- 参观监狱心得体会(10篇)精选
- DB32∕T 1005-2006 大中型泵站主机组检修技术规程
- 斩控式单相交流调压电路设计..
评论
0/150
提交评论