zoukankan      html  css  js  c++  java
  • android studio 生成aar和引用aar

    以android studio 2.0正式版为例

    1.aar包是Android studio下打包android工程中src、res、lib后生成的aar文件,aar包导入其他android studio 工程后,其他工程可以方便引用源码和资源文件

    2.生成aar包步骤:

    2.1用android studio打开一个工程,然后新建一个Module,新建Module时候选择Android Library,后面按新建普通工程操作

    2.2新建Module 类型为android Library 后如下图所示

    2.3在新建的Module中编写完代码后,接下来编译整个工程后就会自动生成aar包,选中自己创建好的Module(我的就是paysdk)

    点击菜单栏 Build里面的Make Module ‘xxx’  如下图:

    2.4编译完成之后会在Module的build-->outputs-->aar-->xxxxx.aar 如图:

    3.其他androidstudio工程引用aar包

    3.1将aar包复制到libs目录下 如下图:

    3.2配置build.gradle文件:

    加入

      repositories {
            flatDir {
            dirs 'libs'
        }

    compile(name:'paysdk-debug', ext:'aar')   name后面是自己的aar的名字

    完整的配置文件:

    apply plugin: 'com.android.application'
    
    android {
        compileSdkVersion 23
        buildToolsVersion "23.0.2"
    
        defaultConfig {
            applicationId "com.umpay.paydemo"
            minSdkVersion 15
            targetSdkVersion 23
            versionCode 1
            versionName "1.0"
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    
    
    }
    repositories {
        flatDir {
            dirs 'libs'
        }
    }
    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        compile 'com.android.support:appcompat-v7:23.3.0'
        compile(name: 'paysdk-debug', ext: 'aar')
    }

    3.3最后一个同步gradle

    在这里说一下发布一个aar的注意事项:

    修改Module(也就是生成aar的工程,我的是paysdk)里面的代码的时候,重新编译好之后,需要把引用aar项目当中的aar文件删掉,并且也需要删除掉build--intermediates--exploded-aar--paysdk,完了在重新同步

    1 要尽量避免定义内部接口,


    这其实是一个编程习惯, 接口interface最好是独立定义, 避免定义在类的内部.


    因为当你发布aar时, 内部的接口在混淆后会独立成一个外部的接口Outer$InnerInterface.


    然后麻烦来了, 别人在实现这个类的时候必须也写成XXX implement Outer$InnerInterface{}的形式. 否则是找不到这个类的.


    想写成XXX implement Outer.InnerInterface{}是不行的, 因为在Outer里没有这个InnerInterface的定义, 在混淆后, 所有的内部类都被改写成了形如Outer$Inner的外部类了. 包括interface, enum, 等等.


    更糟糕的是, 你很可能只是发布项目的一部分代码作为aar, 那你的项目内已经引用的Outer.Inner的类或接口都必须写成Outer$Inner的形式, 否则编译不过, 否则运行时找不到类. 所以, 为了以后不必要的麻烦, 尽量避免使用内部类, 内部接口,


    除非你确认不会混淆代码, 或者会将所有定义和调用都参与混淆.


    2 使用maven发布需要将所有依赖都发布到maven上

    如果你发布多个aar, 每个aar互相依赖, 那么你需要将这些依赖都以maven的形式定义, 否则会在编译时, maven解析某个aar的pom时会报空指针异常.

    maven的形式定义:

    apply plugin: 'maven'
    compile 'com.nineoldandroids:library:2.4.0+'

    3 res内定义的属性或者名称, 都应当加上前缀

    你的aar里定义资源文件是很正常的事, 资源文件很有可能和别人的资源重名, 而悲剧的是, 别人很有可能是引用了另外一个aar导致与你重名. 他无法修改那个aar的资源名, 就像他不能修改你的aar资源名一样. 为了避免这种尴尬, 最好在定义的资源程前加上一个前缀, 比如你的模块简写,商标简写等等. 避免冲突, 还能打个广告, 何乐而不为.

    参考博客:http://blog.csdn.net/getchance/article/details/47257389,http://my.oschina.net/u/1393188/blog/492576?fromerr=GtSFp8Qa

  • 相关阅读:
    ecshop编辑器fckeditor换百度ueditor编辑器教程
    让ecshop用户登录评价以可择匿名评价
    shell与if相关参数
    Spring 框架的设计理念与设计模式分析
    php 变量定义方法
    1. 请问PHP里的ECHO是什么意思 ?请问PHP里的ECHO是什么意思???有什么作用???又应该怎么使用???
    谈谈如何优化MYSQL数据库查询
    MySQL存储引擎Innodb和MyISAM对比总结
    MYSQL的索引类型:PRIMARY, INDEX,UNIQUE,FULLTEXT,SPAIAL 有什么区别?各适用于什么场合?
    计算机网络基础知识总结
  • 原文地址:https://www.cnblogs.com/androidxiaoyang/p/5473916.html
Copyright © 2011-2022 走看看