-
Notifications
You must be signed in to change notification settings - Fork 179
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
使用稳定版,2017年6月28号及之后的资源方案改动不能很好的适配android 7.0的插件动态加载(实时加载一个只含有Fragment…
…/View的插件),所以回退到稳定版本。
- Loading branch information
1 parent
281404c
commit bddb798
Showing
17 changed files
with
234 additions
and
63 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,2 @@ | ||
/build | ||
.idea/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
40 changes: 40 additions & 0 deletions
40
ZeusPlugin/src/main/java/zeus/plugin/ZeusBaseActivity.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
package zeus.plugin; | ||
|
||
import android.app.Activity; | ||
import android.content.Context; | ||
import android.content.res.Resources; | ||
|
||
/** | ||
* 基础的activity | ||
* Created by huangjian on 2016/6/21. | ||
*/ | ||
public class ZeusBaseActivity extends Activity { | ||
|
||
//---------------------插件相关的代码-----------------------start | ||
ZeusHelper helper = new ZeusHelper(); | ||
|
||
@Override | ||
public Object getSystemService(String name) { | ||
return helper.getSystemService(this, super.getSystemService(name), name); | ||
} | ||
|
||
@Override | ||
protected void attachBaseContext(Context newBase) { | ||
super.attachBaseContext(newBase); | ||
helper.attachBaseContext(newBase,this); | ||
} | ||
|
||
@Override | ||
public Resources getResources() { | ||
return PluginManager.getResources(); | ||
} | ||
|
||
/** | ||
* 解决有时插件通过inflate找不到资源的问题 | ||
* @return Resources.Theme | ||
*/ | ||
public Resources.Theme getTheme() { | ||
return helper.getTheme(super.getTheme()); | ||
} | ||
//---------------------------插件相关代码-------------------------end | ||
} |
43 changes: 43 additions & 0 deletions
43
ZeusPlugin/src/main/java/zeus/plugin/ZeusBaseApplication.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
package zeus.plugin; | ||
|
||
import android.app.Application; | ||
import android.content.Context; | ||
import android.content.res.Configuration; | ||
import android.content.res.Resources; | ||
|
||
/** | ||
* 基础的Application | ||
* Created by huangjian on 2016/6/21. | ||
*/ | ||
public class ZeusBaseApplication extends Application { | ||
|
||
//---------------------插件相关的代码-----------------------start | ||
public ZeusHelper helper = new ZeusHelper(); | ||
|
||
@Override | ||
public Object getSystemService(String name) { | ||
return helper.getSystemService(this, super.getSystemService(name), name); | ||
} | ||
|
||
@Override | ||
public Resources getResources() {//这里需要返回插件框架的resources | ||
return PluginManager.getResources(); | ||
} | ||
|
||
/** | ||
* 解决有时插件通过inflate找不到资源的问题 | ||
* | ||
* @return Resources.Theme | ||
*/ | ||
public Resources.Theme getTheme() { | ||
return helper.getTheme(super.getTheme()); | ||
} | ||
|
||
@Override | ||
public void onConfigurationChanged(Configuration newConfig) { | ||
super.onConfigurationChanged(newConfig); | ||
//支持切换语言 | ||
ZeusHelper.onConfigurationChanged(); | ||
} | ||
//---------------------插件相关的代码-----------------------end | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,90 @@ | ||
package zeus.plugin; | ||
|
||
import android.content.Context; | ||
import android.content.res.Resources; | ||
import android.view.LayoutInflater; | ||
|
||
/** | ||
* 一些重复的方法放到这里。 | ||
* Created by huangjian on 2016/7/14. | ||
*/ | ||
public class ZeusHelper { | ||
|
||
//---------------------插件相关的代码-----------------------start | ||
/** | ||
* 一旦插件resources发生变化,这个resources就可以用来比较了 | ||
*/ | ||
public Resources mMyResources = null; | ||
/** | ||
* mMyTheme.getResources()必须为插件resources | ||
*/ | ||
public Resources.Theme mMyTheme = null; | ||
|
||
public Context mContext = null; | ||
/** | ||
* 配置LAYOUT_INFLATER_SERVICE时的一些参数 | ||
* | ||
* @param context 调用着的context | ||
* @param systemServcie systemServer对象 | ||
* @param name server的名字 | ||
* @return systemServer对象 | ||
*/ | ||
public Object getSystemService(Context context, Object systemServcie, String name) { | ||
if (Context.LAYOUT_INFLATER_SERVICE.equals(name)) { | ||
LayoutInflater inflater = (LayoutInflater) systemServcie; | ||
inflater.cloneInContext(context); | ||
//使用某些加固之后该inflater里的mContext变量一直是系统的context,根本不是当前Context | ||
//所以这里手动设置一次 | ||
PluginUtil.setField(inflater, "mContext", context); | ||
return inflater; | ||
} | ||
return systemServcie; | ||
} | ||
|
||
/** | ||
* 当系统调用attachBaseContext时,进行一些参数的设置 | ||
* | ||
* @param newBase base的context即ContextImpl | ||
* @param context 调用者自己 | ||
*/ | ||
public void attachBaseContext(Context newBase, Context context) { | ||
//某些手机中的是mOuterContext作为context来用 | ||
//这样写还可以防止某些手机的内存泄漏,有些手机会记录它启动当前界面的activity作为mOuterContext, | ||
//而如果之前的activity被finish,那么它也不能被GC回收 | ||
PluginUtil.setField(newBase, "mOuterContext", context); | ||
//中兴手机是个奇葩,不知道它怎么实现的又重新生成了一个resources,这里得再次替换 | ||
PluginUtil.setField(newBase, "mResources", PluginManager.mNowResources); | ||
mContext = context; | ||
} | ||
|
||
/** | ||
* 解决有时插件通过inflate找不到资源的问题 | ||
* | ||
* @return Resources.Theme 调用者自己生成的theme | ||
*/ | ||
public Resources.Theme getTheme(Resources.Theme theme) { | ||
Resources localResources = PluginManager.mNowResources; | ||
if ((localResources != null) && (mMyTheme == null || mMyResources != localResources)) { | ||
mMyTheme = localResources.newTheme(); | ||
mMyResources = localResources; | ||
} | ||
if (mMyTheme != null) { | ||
mMyTheme.setTo(theme); | ||
return mMyTheme; | ||
} | ||
|
||
return theme; | ||
} | ||
|
||
/** | ||
* 系统配置改变时的回调,是为了支持插件的语言、地区、字体、字号等的切换 | ||
*/ | ||
public static void onConfigurationChanged() { | ||
if (PluginManager.mNowResources != null | ||
&& PluginManager.mBaseResources != null | ||
&& PluginManager.mNowResources != PluginManager.mBaseResources) { | ||
PluginManager.mNowResources.updateConfiguration(PluginManager.mBaseResources.getConfiguration(), | ||
PluginManager.mBaseResources.getDisplayMetrics()); | ||
} | ||
} | ||
} |
Binary file not shown.
Binary file not shown.
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Binary file not shown.
Oops, something went wrong.