Android插件开发机制 (转)
2016-03-17 13:16
375 查看
1.插件式开发基础
插件式开发是指,只要提供一个主应用程序,此应用程序可以安装和调用其他插件式的功能模块,当应用程序需要增加功能时,不需要升级应用程序,而是通过安装新功能模块的插件即可。其单个插件的运行必须依赖于主应用程序。插件开发是单独进行的。
2.插件是开发的构想
A.通过如下代码可以获取android系统内的安装应用的列表,同时获取每个安装包的信息。
Java代码
List<PackageInfo> pkgs = pm
.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);
B.通过如下代码可以获取每个包的资源
Java代码
PackageManager pm = contxt.getPackageManager();
res = pm.getResourcesForApplication(packageName);
C.通过如下代码可以获取资源的id
Java代码
/* Resources res */
res.getIdentifier(resName, resType, packageName)
D.但是由于android系统的安全机制继承自linux,所以对于不同运行进程的apk之间是不能够直接访问资源和数据,同时android的创始人应该有这个预测留有方法观看如下两个代码片段A和片段B:
代码片段A:AndroidManifest.xml
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
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应用的资源和数据。
以上功能经过验证后发现,设想完全可以实现,插件式开发设想成立。
插件式开发是指,只要提供一个主应用程序,此应用程序可以安装和调用其他插件式的功能模块,当应用程序需要增加功能时,不需要升级应用程序,而是通过安装新功能模块的插件即可。其单个插件的运行必须依赖于主应用程序。插件开发是单独进行的。
2.插件是开发的构想
A.通过如下代码可以获取android系统内的安装应用的列表,同时获取每个安装包的信息。
Java代码
List<PackageInfo> pkgs = pm
.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);
B.通过如下代码可以获取每个包的资源
Java代码
PackageManager pm = contxt.getPackageManager();
res = pm.getResourcesForApplication(packageName);
C.通过如下代码可以获取资源的id
Java代码
/* Resources res */
res.getIdentifier(resName, resType, packageName)
D.但是由于android系统的安全机制继承自linux,所以对于不同运行进程的apk之间是不能够直接访问资源和数据,同时android的创始人应该有这个预测留有方法观看如下两个代码片段A和片段B:
代码片段A:AndroidManifest.xml
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
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应用的资源和数据。
以上功能经过验证后发现,设想完全可以实现,插件式开发设想成立。
相关文章推荐
- FastJson源码解析:序列化(1.1.45.android)
- Android Material Design theme
- 从编程的角度理解gradle脚本﹘﹘Android Studio脚本构建和编程
- Android 个人总结开源框架
- android之通过clip自定义progress进度条样式
- Android实现将控件等View转化为Bitmap对象,通过ImageView显示的功能
- Android 检查设备是否存在 导航栏 NavigationBar
- Android开发技巧——大图裁剪
- Android开发技巧——大图裁剪
- Android开发技巧——大图裁剪
- Android 之常用工具类(后续)
- Android之framework修改底部导航栏NavigationBar动态显示和隐藏
- android 过场动画如何加载
- android 开发技巧
- 《Android框架揭秘》读书笔记——JNI
- android开发 装饰者模式
- Android Studio 插件推荐(合集)
- Android 常用小代码
- Android项目EditText焦点问题
- android圆角矩形图片的实现进而讨论view自定义的要点