多的不说,先给出今天的参考链接
- 参考链接1 github代码地址
- 参考链接2 任玉刚动态加载机制

改装链接一中的代码

第一种方案的原理这里不说了,Android 换肤功能的实现(Apk插件方式),他这个有几个明显的缺陷(或许是作者懒得做?)
我在这里只是将上面的代码改成没快捷方式,代码安装。
去除快捷方式;
在皮肤资源的配置文件中去掉下面一行

<category android:name="android.intent.category.LAUNCHER" />

代码安装,我这里是直接安装SD卡中的apk文件。如何将apk放置到SD卡下,打开DDMS,导入文件即可。

String filepath =  Environment.getExternalStorageDirectory()+"/myskin-debug.apk";                Log.e(TAG,filepath);                Intent intent = new Intent(Intent.ACTION_VIEW);                intent.setDataAndType(Uri.parse("file://"+filepath),"application/vnd.android.package-archive");                startActivity(intent);

上面的方式中还是有安装提示界面。这一点非常差。

  • 最严重的缺陷就是需要安装,虽然原理上有静默安装和静默写在。但是实现起来还是有困难。

动态加载

因为上面的缺陷,导致那种方法不会被用到生产环境中,我们来看动态加载的方法。其实非常简单。代码如下。

AssetManager assetManager = null;                try {                    assetManager = AssetManager.class.newInstance();                    Method addAssetPath = assetManager.getClass().getMethod("addAssetPath",String.class);                    addAssetPath.invoke(assetManager,Environment.getExternalStorageDirectory()+"/myskin-debug.apk");                    mAssetManager= assetManager;                } catch (Exception e) {                    Log.e(TAG, "onClick: "+e.getMessage() );                    e.printStackTrace();                }                Resources resources = getApplicationContext().getResources();                Resources mResources = new Resources(assetManager,resources.getDisplayMetrics(),resources.getConfiguration());//                Drawable drawable = mSkinContext.getResources().getDrawable(mResId[mCount]);                Drawable drawable = mResources.getDrawable(mResId[mCount]);                mTopbar.setBackground(drawable);                mBottomBar.setBackground(drawable);                mCount++;                if (mCount > 2) {                    mCount = 0;                }

对了,要记得加读写权限。
关于换肤方案,还是去看张鸿洋

更多相关文章

  1. Android(安卓)网络请求,应用的下载与安装
  2. Android中AIDL的使用(一) 之 AIDL经典示例
  3. 如何确定Android中刚修改后的c/c++是否编译成功
  4. 关于Android(安卓)EditText图文混排的总结
  5. Gradle Kotlin DSL , 你知道它吗?
  6. 【Android(安卓)学习记录】:针对Android(安卓)7.0 抓不到HTTPS包
  7. MonoDroid学习笔记(一)―― 搭建MonoDroid开发环境及Hello World
  8. Android实现深度链接(APP外带动态参数唤醒APP,并跳转指定页面,APP
  9. 安卓系统架构多年经验总结:《Android程序的编译,安装和运行》 | An

随机推荐

  1. [Android]自定义Button之drawableLeft居
  2. Android微信登录(shareSDK)注意事项
  3. Android(安卓)实现答题器功能(通过手势实
  4. 详解React Native监听Android回退按键与
  5. Android入门篇四:使用全局变量在Activity
  6. (超详细)android中SqLite数据库的使用(一文
  7. Android(安卓)的 Handler 总结
  8. Android属性动画ValueAnimator源码简单分
  9. Android(安卓)EventBus框架入门
  10. android 自学日记(三) ---Intent