11.2 DL动态加载框架、隐藏自己应用图标

http://blog.csdn.net/singwhatiwanna/article/details/40283117

http://blog.csdn.net/singwhatiwanna/article/details/23387079


使用DexClassLoader加载apk


要加载apk中的资源:

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. protected void loadResources() {  
  2.     try {  
  3.         AssetManager assetManager = AssetManager.class.newInstance();  
  4.         Method addAssetPath = assetManager.getClass().getMethod("addAssetPath", String.class);  
  5.         addAssetPath.invoke(assetManager, mDexPath);  
  6.         mAssetManager = assetManager;  
  7.     } catch (Exception e) {  
  8.         e.printStackTrace();  
  9.     }  
  10.     Resources superRes = super.getResources();  
  11.     mResources = new Resources(mAssetManager, superRes.getDisplayMetrics(),  
  12.             superRes.getConfiguration());  
  13.     mTheme = mResources.newTheme();  
  14.     mTheme.setTo(super.getTheme());  
  15. }  

说明:加载的方法是通过反射,通过调用AssetManager中的addAssetPath方法,我们可以将一个apk中的资源加载到Resources中,由于addAssetPath是隐藏api我们无法直接调用,所以只能通过反射,下面是它的声明,通过注释我们可以看出,传递的路径可以是zip文件也可以是一个资源目录,而apk就是一个zip,所以直接将apk的路径传给它,资源就加载到AssetManager中了,然后再通过AssetManager来创建一个新的Resources对象,这个对象就是我们可以使用的apk中的资源了,这样我们的问题就解决了。




[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. /** 
  2.  * Add an additional set of assets to the asset manager.  This can be 
  3.  * either a directory or ZIP file.  Not for use by applications.  Returns 
  4.  * the cookie of the added asset, or 0 on failure. 
  5.  * {@hide} 
  6.  */  
  7. public final int addAssetPath(String path) {  
  8.     int res = addAssetPathNative(path);  
  9.     return res;  
  10. }  

其次是要实现那两个抽象方法

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. @Override  
  2. public AssetManager getAssets() {  
  3.     return mAssetManager == null ? super.getAssets() : mAssetManager;  
  4. }  
  5.   
  6. @Override  
  7. public Resources getResources() {  
  8.     return mResources == null ? super.getResources() : mResources;  
  9. }  




http://blog.csdn.net/ydt_lwj/article/details/9419239


显示图片:

<ol class="linenums"><li class="L0"><span class="typ">PackageManager</span><span class="pln"> p </span><span class="pun">=</span><span class="pln"> getPackageManager</span><span class="pun">();</span><span class="pln"></span>
</li><li class="L1"><span class="pln">p</span><span class="pun">.</span><span class="pln">setComponentEnabledSetting</span><span class="pun">(</span><span class="pln">getComponentName</span><span class="pun">(),</span><span class="pln"> </span><span class="typ">PackageManager</span><span class="pun">.</span><span class="pln">COMPONENT_ENABLED_STATE_ENABLED</span><span class="pun">,</span><span class="pln"> </span><span class="typ">PackageManager</span><span class="pun">.</span><span class="pln">DONT_KILL_APP</span><span class="pun">);</span></li></ol>

隐藏图标:

<ol class="linenums"><li class="L0"><span class="typ">PackageManager</span><span class="pln"> p </span><span class="pun">=</span><span class="pln"> getPackageManager</span><span class="pun">();</span><span class="pln"></span>
</li><li class="L1"><span class="pln">p</span><span class="pun">.</span><span class="pln">setComponentEnabledSetting</span><span class="pun">(</span><span class="pln">getComponentName</span><span class="pun">(),</span><span class="pln"> </span><span class="typ">PackageManager</span><span class="pun">.</span><span class="pln">COMPONENT_ENABLED_STATE_DISABLED</span><span class="pun">,</span><span class="pln"> </span><span class="typ">PackageManager</span><span class="pun">.</span><span class="pln">DONT_KILL_APP</span><span class="pun">);</span></li></ol>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值