Android插件化开发之Atlas插件适配

前三篇文章,介绍了OpenAtlas的一些基本用法以及patch的aapt的编译方法。

- Android插件化开发之Atlas初体验

- Android插件化开发之Atlas生成插件信息列表

- Android插件化开发之Atlas资源打包工具补丁aapt的编译

OpenAtlas的原则就是避免引入冗余的库。也就是宿主中提供了第三方库后,插件中就不要再引入该库,编译的时候以provided形式提供即可。最简单的例子就是v4,v7兼容库,应该避免引入。为了让我妈的插件脱离OpenAtlas也能独立运行,但是编译成插件又不用过多的修改代码,我们使用android studio的productFlavors进行适配。

在适配前,一切开发都是按照正常的程序开发流程进行。开发完毕后,我们需要修改build.gradle文件进行适配。首先我们要做的就是增加productFlavors ,其中alone就是代表能独立运行的,openatlas就代表是插件。

 productFlavors {
        alone{

        }
        openatlas {

        }
    }

而我们的插件, versionName后要加入0x10-0x7f之间的值进行资源分区。之前的做法是直接修改该属性,现在我们在productFlavors 中重写改属性完成资源分区,就像这样子。

 productFlavors {
        alone{

        }
        openatlas {
            versionName "1.00x21"
        }
    }

而对应的依赖,当我们编译alone时,则要把依赖的库打包进去,但是当我们编译openatlas时,则只是编译时提供,不会打包进去,我们使用provided+Flavor达到目的,拿我们之前的扫描二维码的项目举例。


dependencies {
    compile  files(‘libs/ZXing-Core-3_2.jar‘)
    aloneCompile ‘com.android.support:appcompat-v7:22.2.1‘
    openatlasProvided files(‘libs/android-support-v4.jar‘)
    openatlasProvided files(‘libs/android-support-v7-appcompat.jar‘)
}

但是这样做有一个问题,就是provided方式只支持jar,但是如果我们使用兼容包的AppCompatActivity类,难免会用到资源文件,这时候,我们编译openatlas的Flavor时,就需要将这些资源文件剔除。

至于aar中,如何提取jar,其实很简单,把aar解压了,把里面的classes.jar和lib目录中的jar提取处理就可以了。

一个最简单的例子就是主题文件。里面引用了资源文件Theme.AppCompat.Light.NoActionBar,我们要将其剔除。做法也很简单,在src目录下新建openatlas目录,并在里面新建values目录,在values下新建styles.xml文件,在里面加入,注意,插件的主题文件在宿主中要存在,最简单的做法就是宿主和插件的主题名字相同。

<resources>

    <style name="AppTheme" parent="">

    </style>

</resources>

我们看到我们就是简单的将父类变成空了。这样编译打包的时候就不会报错了。android studio会对我们的文件自动进行合并。其他资源问题也进行类似的处理。之后就是插件的生成。插件信息列表的生成,引入插件等等操作了。和之前的文章类似,就不再累赘了。

而插件的生成记得使用Flavor为openatlas生成,在android studio左边点击build variants进行修改即可

源码下载

http://download.csdn.net/detail/sbsujjbcy/9027641

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-22 14:55:38

Android插件化开发之Atlas插件适配的相关文章

Android插件化开发之Atlas生成插件信息列表

上一篇文章,[Android插件化开发之Atlas初体验]( http://blog.csdn.net/sbsujjbcy/article/details/47446733),简单的介绍了使用Atlas的整个流程,但是如果你没有实践过的话估计还是一头雾水,从这篇文章开始,慢慢的切入细节.这篇文章的主题是生成插件信息列表. 细心的你或许发现了上篇文章中我们使用了一个叫openatlasbundler的项目生成了so以及一个json文件,说白了这个so只不过就是apk重命名的,而这个json文件中包

Android插件化开发之OpenAtlas插件启动方式与插件启动广播

到现在为止已经写了6篇文章了 Android插件化开发之OpenAtlas初体验 Android插件化开发之OpenAtlas生成插件信息列表 Android插件化开发之OpenAtlas资源打包工具补丁aapt的编译 Android插件化开发之OpenAtlas插件适配 Android插件化开发之解决OpenAtlas组件在宿主的注册问题 Android插件化开发之OpenAtlas中四大组件与Application功能的验证 这篇文章主要介绍一下OpenAtlas插件的几种启动方式,在Atl

Android插件化开发之Atlas初体验

OpenAtlas一款强大的Android非代理动态部署框架,目前已经处于稳定定状态. 与传统的代理方式插件不同,OpenAtlas需要对注册动态部署的组件到manifest文件. 初体验,只不过就是把程序跑起来,跑通,后面的路还很长.这个过程中也是遇到了不少问题,刚开始拿到这个项目真是无处下手(没有看到有wiki),后来百度搜索了下找到四篇博文,大概就是OpenAtlas的作者写的吧 Android OpenAtlas初识 Android OpenAtlas之二 基本结构 OpenAtlas之

Androd插件化开发之Atlas资源打包工具补丁aapt的编译

我们先来看看Android Studio自动生成的R文件里的内容,你会发现,R文件里有很多内部类,而内部类里有很多int类型的值,他们都是以0x7f开头. 我们在编译一个Android应用程序的资源的时候,至少会涉及到两个包,其中一个是被引用的系统资源包,另外一个就是当前正在编译的应用程序资源包.每一个包都可以定义自己的资源,同时它也可以引用其它包的资源.那么,一个包是通过什么方式来引用其它包的资源的呢?这就是我们熟悉的资源ID了.资源ID是一个4字节的无符号整数,其中,最高字节表示Packag

Android插件化开发之Hook StartActivity方法

第一步.先爆项目demo照片,代码不多,不要怕 第二步.应该知道Java反射相关知识 如果不知道或者忘记的小伙伴请猛搓这里,Android插件化开发基础之Java反射机制研究 http://blog.csdn.net/u011068702/article/details/49863931 第三步.应该知道Java静态代理知识 如果不知道或者忘记的小伙伴请猛搓这里,Android插件化开发基础之静态代理模式 http://blog.csdn.net/u011068702/article/detai

Android插件化开发之DexClassLoader动态加载dex、jar小Demo

一.温故动态加载ClassLoader机制 如果对Android的ClassLoader加载机制不熟悉,猛戳Android插件化开发动态加载基础之ClassLoader工作机制 http://blog.csdn.net/u011068702/article/details/53248960 二.介绍 我们知道在Android中可以跟java一样实现动态加载jar,但是Android使用德海Dalvik VM,不能直接加载java打包jar的byte code,需要通过dx工具来优化Dalvik

Android Studio快速开发之道

概述 现如今开发越来越追求效率和节奏,节省出时间做更多的事情,除了开发技术上的封装等,开发工具的使用技巧也是很重要的,今天就根据自己的经验来给大家介绍一下Android Studio快速开发之道. Postfix completion 介绍 Postfix completion 是IntelliJ IDEA很早就有的功能,该功能基于已经输入的表达式和你添加的后缀来实现另一个你想要的表达式.例如在布尔表达式之后加上后缀if就是if语句 . 常用后缀介绍 下面介绍一下个人工作中觉得比较常用的几个后缀

android控件开发之AutoCompleteTextView

android控件开发之AutoCompleteTextView 此控件主要是用在当客户需要输入某些内容时,会提示补全信息供用户选择,用以减少客户的输入操作 此控件中的选择数据,可以是自定义的String数组数据,也可以是list列表数据 JAVA代码: package com.example.autocompletetext; import java.util.ArrayList; import android.os.Bundle; import android.app.Activity; i

android控件开发之ListView

android控件开发之ListView 本文主要讲述安卓开发中的ListView控件的使用方法 java代码: package com.example.listview; import java.util.ArrayList; import java.util.HashMap; import android.app.ListActivity; import android.os.Bundle; import android.view.Menu; import android.view.View