`
473687880
  • 浏览: 535795 次
文章分类
社区版块
存档分类
最新评论

android模块化app开发笔记-2插件间布局文件共享

 
阅读更多

android编程时布局文件,图片资源等都是放在同一个文件夹下,这样照成一个问题就是我们想重用UI布局文件和图片时就还需要其分离这些资料,相信大部分android程序员都遇到过这样的问题,其痛苦程度不亚于世纪末日赶不上诺亚方舟。

今天我用apkplug框架实现将不同的资源放在不同的插件apk包中,然后通过插件间类查找的方式实现插件机布局文件共享。不说废话了!

一 新建一个插件myBundle1由它提供布局文件供myBundle插件调用

结合上一篇文章本章我再建一个插件工程myBundle1新增实现3个java类分别是

BundleContextFactory.java 这个类的唯一功能就是存储插件启动时获取的BundleContext,该类中有我们需要的android.content.Context

public class BundleContextFactory implements BundleInstance{
private static BundleContextFactory _instance=null;
   private BundleContext mcontext = null;
   synchronized public static BundleContextFactory getInstance(){
    if(_instance==null){
    _instance=new BundleContextFactory();
    }
    return _instance;
    } 
	private BundleContextFactory(){
	
	}

	public BundleContext getBundleContext() {
		// TODO Auto-generated method stub
		return this.mcontext;
	}
	public void setBundleContext(BundleContext arg0) {
		// TODO Auto-generated method stub
		this.mcontext = arg0;
	}

}

TBSurfaceView.java 一个SurfaceView 用于演示View

myLayout.java 继承RelativeLayout,通过它插件myBundle就可以获取插件myBundle1的布局文件了

public class myLayout extends RelativeLayout{

	public myLayout(Context context, AttributeSet attrs) {
		super(context, attrs);
		//获取插件启动时得到的Context
		Context m=BundleContextFactory.getInstance().getBundleContext().getBundleContext();
		LayoutInflater mInflater=LayoutInflater.from(context);
		mInflater = mInflater.cloneInContext(m); 
		mInflater.inflate(R.layout.main11, this, true);  
	}
}

布局文件 main11.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/tt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="我是插件myBundle1" />
 <com.example.mybundle1.TBSurfaceView
         android:layout_below="@+id/tt"
         android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        />
</RelativeLayout>

最后插件myBundle1文件目录为

二 修改插件myBundle布局文件activity_main.xml添加View com.example.mybundle1.myLayout

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/tt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="hello_world 我是myBundle的Activity" />
 <com.example.mybundle1.myLayout
     android:layout_below="@+id/tt"
         android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/myLayout1"/>
 <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" android:layout_alignBottom="@+id/myLayout1" android:layout_centerHorizontal="true"/>
</RelativeLayout>
三 将两个编译好的插件添加到主应用的assets文件夹中并在PropertyInstance接口的public String[] AutoStart()中添加两个插件自动启动
public String[] AutoStart() {
		File f0=null,f1=null;
		try {
			InputStream in=context.getAssets().open("myBundle.apk");
			f0=new File(context.getFilesDir(),"myBundle.apk");
			if(!f0.exists())
			 copy(in, f0);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		try {
			InputStream in=context.getAssets().open("myBundle1.apk");
			f1=new File(context.getFilesDir(),"myBundle1.apk");
			if(!f1.exists())
			 copy(in, f1);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	return new String[]{"file:"+f0.getAbsolutePath(),"file:"+f1.getAbsolutePath()};
	}

最后启动应用查看效果如图

最后给出源码

注意:1.以上需要注意的问题的是需要引出的类都应该在plugin.xml文件中添加Export-Package="com.example.mybundle1"这样插件间才能找的到(下一章会实现另一种方式插件间交换类)

2.apkplug官网为:www.apkplug.com

分享到:
评论

相关推荐

    新版Android开发教程和笔记

    新版Android开发教程+笔记六--应用3、4 布局.pd 新版Android开发教程+笔记十--基础UI编程4.pdf 新版Android开发教程+笔记十一--可视化UI设计Dr 新版Android开发教程+笔记十三(待续)--应用、pe 新版Android...

    Android零基础教程视频链接

    应用3、4 布局.Android开发教程+笔记7--基础UI编程1.Android开发教程+笔记8--基础UI编程2.Android开发教程+笔记9--基础UI编程3.Android开发教程+笔记10--基础UI编程4.Android开发教程+笔记11--可视化UI设计DroidDraw...

    新版Android开发资料2

    ├新版Android开发教程+笔记六--应用3、4 布局.pdf ├新版Android开发教程+笔记七--基础UI编程1.pdf ├新版Android开发教程+笔记七--基础UI编程2.pdf ├新版Android开发教程+笔记十二--文件存取、数据库编程.pdf ├...

    Android智能电视APP开发笔记(二)Android开发环境搭建.pdf

    Android智能电视APP开发笔记(二)Android开发环境搭建 Android智能电视APP开发笔记(二)Android开发环境搭建主要讲述了Android开发环境的搭建,包括Eclipse和Android Studio两个主流开发工具的使用。文章指出,...

    android开发资料1

    ├新版Android开发教程+笔记六--应用3、4 布局.pdf ├新版Android开发教程+笔记七--基础UI编程1.pdf ├新版Android开发教程+笔记七--基础UI编程2.pdf ├新版Android开发教程+笔记十二--文件存取、数据库编程.pdf ├...

    uni-app插件开发

    在uni-app中开发插件,你需要了解以下核心知识点: 1. **插件结构**:uni-app插件通常包含`plugin.json`配置文件、`src`源代码目录和示例项目。`plugin.json`用于描述插件信息,如名称、版本、依赖等;`src`包含...

    基于Android Studio经典蓝牙APP---继上一次的完善版之APP工程文件

    在这个基于Android Studio的经典蓝牙APP项目中,我们主要探讨的是如何在Android平台上开发一个利用蓝牙通信功能的应用程序。这个APP可能是作者毕业设计的一部分,因此它包含了实际项目开发中的关键元素,可以作为...

    Android智能电视APP开发笔记.doc编程资料

    Android智能电视APP开发笔记.doc

    基于Android Studio开发的笔记APP.rar

    【Android Studio开发笔记APP详解】 Android Studio是Google官方推荐的Android应用开发集成开发环境(IDE),它提供了丰富的功能,使得Android应用开发变得更加高效和便捷。本教程将基于Android Studio,详细解析一...

    Android智能电视APP开发笔记(二)Android开发环境搭建[整理].pdf

    Android 智能电视 APP 开发笔记(二)Android 开发环境搭建是Android APP 开发者不可或缺的部分,本笔记将指导我们如何搭建Android 开发环境,並介绍 Eclipse 和 Android Studio 两个主要开发工具的使用。...

    新版Android开发教程 笔记6--应用3、4 布局

    最后,我们可能还讨论了在运行时动态改变布局的方法,如使用`LayoutInflater`实例化布局,以及在代码中添加、移除或修改视图。这在创建动态和交互式的用户界面时非常有用。 总的来说,新版Android开发教程笔记6的...

    App开发311-Artificial-Intelligence-Project开发笔记

    App开发311-Artificial-Intelligence-Project开发笔记

    安卓课程设计----基于Android Studio开发的笔记APP.zip

    "安卓课程设计----基于Android Studio开发的笔记APP.zip" 是一个与安卓应用开发相关的项目,其中包含了使用Android Studio开发的一款笔记应用程序的完整源代码和可能的项目报告。这个项目可能是针对学生或者对安卓...

    Android--极简笔记App

    【Android 极简笔记App开发详解】 在移动设备上,笔记应用是不可或缺的一部分,而“Android--极简笔记App”正是这样一个基于Material Design设计规范的轻量级应用程序。这款应用利用了Android平台上的先进技术和...

    Android插件化开发笔记

    在Android平台上,插件化开发是一种先进的技术,它允许开发者将应用程序的部分功能模块化,以插件的形式动态加载,从而实现灵活更新、降低维护成本、提高用户体验等目标。本笔记将深入探讨Android插件化开发的相关...

    AndroidAPP开发入门教程.pdf

    Android APP 开发入门教程主要介绍了 Android APP 的开发流程,从 SDK 下载、开发环境搭建、代码编写、APP 打包等步骤一一讲解。本教程通过实践操作,带领读者一步步完成 Android APP 的开发,帮助读者快速掌握 ...

    UNI-Excel插件

    3. **配置文件管理**:很多应用程序会使用Excel文件作为配置文件,**UNI-Excel插件**可以帮助开发者轻松读写这些配置文件,简化开发流程。 4. **报表生成**:在企业级应用中,需要定期生成各种报表,**UNI-Excel插件...

    Android平台uni原生插件开发之通过uniapp引入原生插件

    在Android平台上,开发uni原生插件是一种将Java或Kotlin等原生代码与uni-app应用结合的方式,以便利用uni-app的跨平台特性同时发挥Android原生功能的优势。本教程将详细讲解如何通过uni-app引入并使用原生插件,以...

    认识Android布局文件

    在Android应用开发中,界面设计是一个至关重要的环节,而XML格式的布局文件正是构建这些界面的核心工具。布局文件定义了应用程序界面的结构,包括它所包含的控件、控件间的相对位置以及界面的整体视觉表现。通过理解...

Global site tag (gtag.js) - Google Analytics