`
zhtch_123
  • 浏览: 83305 次
  • 性别: 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插件化的实践技巧,并为自己的项目应用这些知识。 总之,Android的占位式插件化开发是一种强大的技术,它可以极大地提高应用的灵活性和可维护性。然而,实现这样的...

    安卓插件式开发

    安卓插件式开发是一种在Android平台上实现模块化、可扩展性的技术,它允许开发者将应用程序的功能拆分成多个独立的组件,这些组件被称为“插件”。这种开发模式使得应用的核心功能与扩展功能分离,提高了代码的复用...

    Android插件换肤Demo

    【Android插件换肤Demo】是一个演示如何在Android应用程序中实现动态皮肤更换功能的示例。这个Demo展示了如何通过插件化技术来实现在运行时切换应用的视觉样式,为用户提供个性化的体验。尽管这个Demo可能并不直接...

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

    "Android-hydrogen"项目就是一个这样的尝试,它提供了一个框架,允许开发者使用Lua来编写Android应用,并且支持插件化开发模式。 首先,我们要理解“插件化开发”。插件化开发是指将应用程序分解为多个独立的功能...

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

    在Android应用开发中,动态加载和插件式开发是一种高级技术,它允许应用程序在运行时加载新的功能或更新,而无需用户重新安装整个应用。这种技术对于实现自动升级和提高用户体验具有重要意义。以下是对这个"android ...

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

    这种技术主要基于“DL插件式开发”概念,旨在提高应用的灵活性、可扩展性和更新效率。下面我们将深入探讨这个主题,以及与之相关的文件类型和应用场景。 首先,DL插件式开发的核心是将应用程序的功能模块化,这些...

    Android 插件式打开PDF文件

    在Android平台上,开发一款能够插件式打开PDF文件的应用是一项常见的任务。这涉及到对PDF阅读器的集成,以便用户能够方便地浏览和处理PDF文档。本文将深入探讨如何实现这一功能,主要涵盖以下几个方面: 1. **PDF...

    Android+移动开发一本就够

    《Android+移动开发一本就够》是一本全面覆盖Android移动开发领域的书籍,旨在为读者提供一套完整的Android学习路径,从基础知识到高级技术,让开发者能够掌握Android应用开发的各个方面。本书内容丰富,适合初学者...

    《Android项目驱动式开发教程》第一章开发入门.pptx

    【Android项目驱动式开发教程】第一章主要介绍了Android开发的基础知识,包括Android的发展历史、系统版本迭代和基本架构。以下是对这些知识点的详细说明: 1. **Android系统简介**: Android是一个基于Linux内核...

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

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

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

    2. **Android插件开发**:掌握如何编写和集成自定义的Android Gradle插件,包括理解插件的基本结构、如何定义和注册任务,以及如何操作项目构建过程。 3. **Gradle脚本**:理解Gradle的DSL(领域特定语言),如何在...

    android 插件式无刷新换肤和字体大小切换 兼容android 8.1

    综上所述,实现Android插件式无刷新换肤和字体大小切换涉及多个层面的技术,包括资源加载、UI刷新、系统兼容性处理以及可能的工具类利用。开发者需要深入理解Android系统的机制,并灵活运用各种技术手段,以提供优秀...

    安卓Excelwordppt文档读写相关-Android插件式打开PDF文件.rar

    这个压缩包文件"安卓Excelwordppt文档读写相关-Android插件式打开PDF文件.rar"主要涉及的是Android应用如何以插件化的方式处理PDF文档。下面我们将深入探讨这个主题。 首先,Android系统本身并不支持直接编辑或读取...

    Android-HiBeaver是一个用于进行Android字节码插桩的Gradle插件

    Android-HiBeaver就是这样一个专门针对Android应用的Gradle插件,它简化了字节码插桩的过程,为开发者提供了便利。 Android-HiBeaver的核心功能是利用ASM库来操作字节码,实现对Android应用的代码注入。ASM是一个...

    插件式开发(三)

    在Android应用开发中,插件化技术是一种将应用程序的功能模块化,使得这些模块可以在运行时动态加载和卸载的技术。这种技术可以极大地提高应用的可维护性和灵活性。本篇文章主要探讨的是如何在插件化开发中打开未...

    Android实现的一对一聊天(socket),包括服务器和客户端,android studio2.3开发

    Android Studio是Google官方推荐的Android开发环境,版本2.3包含了一些重要的特性,如Gradle插件2.3.0,支持Java 8语法,以及改进的布局编辑器。开发者可能利用这些特性来提高代码质量和开发效率。 6. **文件结构*...

    android 天气插件

    【Android天气插件开发详解】 Android天气插件是Android平台上的一种小型应用程序,它可以在主屏幕上显示当前的天气信息,如温度、湿度、风速、天气状况等,为用户提供即时的气象数据。本插件源代码提供了完整的...

Global site tag (gtag.js) - Google Analytics