`
zhtch_123
  • 浏览: 80573 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Android插件式开发(一)

 
阅读更多

 

1.插件式开发基础

 

插件式开发是指,只要提供一个主应用程序,此应用程序可以安装和调用其他插件式的功能模块,当应用程序需要增加功能时,不需要升级应用程序,而是通过安装新功能模块的插件即可。其单个插件的运行必须依赖于主应用程序。插件开发是单独进行的。

 

2.插件是开发的构想

 

A.通过如下代码可以获取android系统内的安装应用的列表,同时获取每个安装包的信息。

 

 

List<PackageInfo> pkgs = pm
				.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);

 

 

B.通过如下代码可以获取每个包的资源

 

 

PackageManager pm = contxt.getPackageManager();
res = pm.getResourcesForApplication(packageName);

 

 

 C.通过如下代码可以获取资源的id

 

 

/* Resources res */

res.getIdentifier(resName, resType, packageName)
 

 

 D.但是由于android系统的安全机制继承自linux,所以对于不同运行进程的apk之间是不能够直接访问资源和数据,同时android的创始人应该有这个预测留有方法观看如下两个代码片段A和片段B:

 

代码片段A:AndroidManifest.xml

 

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.iClient"
    android:installLocation="auto"
    android:sharedUserId="com.iClient.Main"
    android:sharedUserLabel="@string/share_user_label"
    android:versionCode="1"
    android:versionName="1.0" >
 
    <uses-sdk
        android:minSdkVersion="11"
        android:targetSdkVersion="15" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:process="com.iClient"
        android:theme="@style/AppTheme"
        android:name=".data.ClientApplication" >
        <activity
            android:name=".MainActivity"
            android:label="@string/title_activity_main"
            android:process="com.iClient" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
                  .........................................................
     </application>

    </manifest>

 

 

代码片段B:AndroidManifest.xml

 

 <manifest xmlns:android="http://schemas.android.com/apk/res/android"    
    package="com.iClient.agricultrue"
    android:sharedUserId="com.iClient.Main"
    android:sharedUserLabel="@string/share_user_label"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="15" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity android:name=".MainActivity" />
     ..........................................................
    </application>

</manifest>

    如以上2个代码段比较 android:sharedUserId="com.iClient.Main"是共同的配置,如此可以保证A应用可以访问B应用的资源和数据。

以上功能经过验证后发现,设想完全可以实现,插件式开发设想成立。

 

分享到:
评论
5 楼 zhtch_123 2013-09-23  
hold_on 写道
zhtch_123 写道
可以,使用apk的静默安装

那还是要安装啊,像微信好像是通过动态加载dex,来实现的
注意:这个dex是从一个存储在sdcard上的未安装的apk中得到的



我知道你的意思,微信的真正插件是游戏插件,其他的所谓插件都是假的,其他的功能插件是虚拟的,实际代码都已经实现过了,只是通过设置将有些功能关闭了而已。你细细研究下就会发现,游戏插件也就是如我描述实现的。
4 楼 hold_on 2013-09-17  
zhtch_123 写道
可以,使用apk的静默安装

那还是要安装啊,像微信好像是通过动态加载dex,来实现的
注意:这个dex是从一个存储在sdcard上的未安装的apk中得到的
3 楼 zhtch_123 2013-09-09  
可以,使用apk的静默安装
2 楼 hold_on 2013-07-23  
xingzhe321655 写道
这个思路不错,但是每安装一个插件就会弹出对话框,提示用户有新的程序安装,体验不好,请问有什么解决办法没有

同问:能不能不通过额外安装apk的方式达到目的,反编译腾讯的apk确实没有安装额外的apk(在data/data目录下也没发现相关插件包名)
1 楼 xingzhe321655 2012-11-04  
这个思路不错,但是每安装一个插件就会弹出对话框,提示用户有新的程序安装,体验不好,请问有什么解决办法没有

相关推荐

    Android 插件式开发

    本程序为android插件式开发的一个demo程序。里面有一个主程序,两个插件程序。并且实现了主程序和插件之间通信的几种方式。对应博客地址:http://blog.csdn.net/chenliqiang12345678/article/details/50611264

    android 占位式插件化开发例子

    占位式插件化开发例子

    Android-hydrogen是一个插件式的Android应用程序使用Lua开发

    hydrogen是一个插件式的Android应用程序,使用Lua开发

    Android App 插件化开发框架+路由功能集成开发包,基于RePlugin整合路由

    Android App 插件化开发框架+路由功能集成开发包,基于RePlugin整合路由,马甲包SDK, APP插件集成,插件通过路由相互调用 https://github.com/henryxm/Host

    安卓插件开发(无需安装)

    DL插件式开发,无需安装APK,就可以运行插件。

    Android插件换肤Demo

    这只是功能实现,代码并不能用到项目中,如果要找集成框架可以去我的博客找:http://blog.csdn.net/z240336124/article/details/50699142

    Android开发案例驱动教程 配套代码

    《Android开发案例驱动教程》 配套代码。 注: 由于第12,13,14章代码太大,无法上传到一个包中。 这三节代码会放到其他压缩包中。 作者:关东升,赵志荣 Java或C++程序员转变成为Android程序员 采用案例驱动模式...

    Node.js-Android傻瓜式分包插件

    简介:Android傻瓜式MultiDex插件,从此再也不用担心方法数问题

    android 动态加载之自动升级(插件式开发)

    这一个动态加载的demo,如果不知道原理的,可去http://blog.csdn.net/u013895206 博客了解下原理。

    Google Android SDK开发范例大全(完整版)

    虽然没有 Eclipse 和 Android Developer Tools 插件也可以开发 Android 应用程序,但是那样就需要熟悉 Android SDK。 Android SDK 是作为一个 ZIP 文件发布的,可以将该文件解压到硬盘上的一个目录中。由于有多个 ...

    新版Android开发教程.rar

    这一联盟将会支持 Google 发布的 Android 手机操作系统或者应用软件,共同开发名为 Android 的 开 放源代码的移动系统。开放手机联盟包括手机制造商、手机芯片厂商和移动运营商几类。目前,联盟成员 数 量已经达到了...

    DynamicPlugin:Android插件式开发类库,提供插件生命周期的管理,可同时管理并运行多个插件

    DynamicPluginAndroid插件式开发类库,提供插件生命周期的管理,可同时管理并运行多个插件。Android Plugin Project, use to make your own Android Host-Plugin APP.This project will take care of plugin's ...

    Android高级编程--源代码

    因此,对Android感兴趣的开发人员都把Google在2008年发布Android这一举措作为移动技术发展史上的一个非常令人期待的重大事件。  由于Android构建在开源代码的框架之上,而且提供了强大的SDK库和开放的理念,所以它...

    Android-AdPlayBanner功能丰富一键式使用的图片轮播插件

    AdPlayBanner是一个Android平台基于ViewPager实现的轮播图插件,主要用以自动或者手动地播放轮播图,提供了Fresco、Picasso、Glide等图片加载方式供用户使用,以及多种图片切换动画,设置轮播时间,设置数据源顺序,...

    Android传感器MotionSensor开发实验.pdf

    ⾕歌官⽅ 开发出了基于Eclipse的ADT(Android Develop Tools)插件,通过为Eclipse安装插件的⽅式⽀持Android的开发,⽬前官⽅已经停⽌ADT 插件的开发与维护⼯作,并开发出了更加强⼤以及好⽤的Android Studio软件。...

    Android仿苹果的上下翻页效果

    效果不错,能够上下翻页,有兴趣童鞋可以学习学习,据说是失传已久的江湖秘笈,哈哈~~建议开发童鞋使用跨平台开发工具——统一开发环境UDE来进行查看、调试、开发哦~~统一开发环境是一款HTML5跨平台一站式应用开发、...

    Android飞机战斗游戏源码

    通过整合多种手机应用的开发包(SDK)及对应的Eclipse Plugin、跨平台中间件、中国移动开发者社区服务件,支持HTML5跨平台开发,原有Java跨平台插件支持Android、Symbian、Kjava的跨平台和原生开发,已覆盖Android、...

    Android画廊视图的3D效果

    建议开发童鞋使用跨平台开发工具——统一开发环境UDE来进行查看、调试、开发哦~~统一开发环境是一款HTML5跨平台一站式应用开发、调试和部署工具, 它支持HTML5跨平台开发,原有Java跨平台插件支持Android、Symbian、...

    jQuery+HTML5的绘图应用插件

    建议开发童鞋使用跨平台开发工具——统一开发环境UDE来进行查看、调试、开发哦~~它是一款HTML5跨平台一站式应用开发、调试和部署工具, 支持HTML5跨平台开发,原Java跨平台插件支持Android/Symbian/Kjava的跨平台和...

    Android入门到精通源代码.

    2.4.2 安装和配置Eclipse中Android插件 2.5 使用Eclipse开发Android应用程序 2.5.1 使用Eclipse创建Android项目 2.5.2 Eclipse中Android项目架构 2.5.3 Eclipse中Android项目的调试和运行 第3章 Android中的Activity...

Global site tag (gtag.js) - Google Analytics