Android Studio生成和引用.aar库文件

版权声明:本文为博主项目中经验总结,著文备份,欢迎补充交流! https://blog.csdn.net/u013806583/article/details/70158535

先来句综述:.aar和.jar库文件的区别
aar 文件是建立在 jar 文件的基础之上, aar 是 jar 文件的一个变种。其实他们本质上没有什么区别,都是压缩包,只是能包含的内容不一样

  • jar只包含了class文件与清单文件。虽然也能包含资源文件,但不过是文本资源和图片资源,不能包含Android平台下的drawable以及各种xml文件.

  • aar包括的东西更多一些,包含所有资源文件、第三方库文件、so 文件、class以及res资源文件全部包含。

详细的说明请参考官方开发文档:(自备梯子)

https://developer.android.com/studio/projects/android-library.html#AddDependency

下面就使用做一个简要说明:

背景:

如果自己写的一个项目,包含各种UI和res。打算将这个项目做成库文件,方便其他的项目调用。


生成jar和aar文件

第一步:修改build.gradle文件
1.

apply plugin:'com.android.application'

修改为

apply plugin:'com.android.library'

2.注释 applicationId “……”

defaultConfig {
//        applicationId "com.xinyunlian.reglogin"
        ......
}


第二步:修改AndroidManifest.xml

<!--Manifest的合并涉及到很多知识,具体的可以参考本文最后的相关链接-->
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="......" >

    <!--添加需要的权限-->
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        tools:replace="android:theme,android:icon,android:label">
        添加replace属性

        <activity
            android:name="com.example.guan.webrtc_android_aar.activity.GWebRTC_MainActivity"
            android:theme="@style/AppTheme.NoActionBar"   
            android:windowSoftInputMode="stateHidden|stateAlwaysHidden">
            把theme指定到这里

            注释掉LAUNCHER
            <!--<intent-filter>-->
            <!--<action android:name="android.intent.action.MAIN" />-->

            <!--<category android:name="android.intent.category.LAUNCHER" />-->
            <!--</intent-filter>-->

        </activity>
        <activity
            android:name="com.example.guan.webrtc_android_aar.activity.GWebRTC_CallActivity"
            android:screenOrientation="portrait"
            android:theme="@style/AppTheme.NoActionBar"
            android:windowSoftInputMode="stateHidden|stateAlwaysHidden">
            <!-- 不自动弹出软件盘-->
            <!--固定屏幕方向-->
        </activity>

</manifest>

为什么要修改Manifest?

注:在对有引用library project的Android项目进行打包时有时会需要进行Manifest的merge操作,进行merge操作有一些条件:

  1. minSdkVersion:主工程的最低版本要求不能低于库工程
  2. targetSdkVersion:同样,主工程不能低于库工程
  3. : 所有工程(包含主工程,库工程)的Manifest文件中都要有标签
  4. 如果Manifest设置不当,当导入你自己生成的.aar库文件到另一个项目时,就会失败。


第三步:重新编译

存储位置:
*.jar:build/intermediates/bundles/debug(release)/classes.jar
*.aar:build/outputs/aar/app-debug.aar

注意:确保.aar中所有资源文件(如activity_main.xml、drawable等等)和Activity的名称与调用者不一样。

至此,jar和aar文件已经生成。下面就可以放到项目中调用。


调用jar和aar文件

第一步:jar和aar文件拷贝到:libs目录

第二步:修改build.gradle文件

repositories {
    //添加一个本地仓库,并把libs目录作为仓库的地址
    flatDir
            {
                dirs 'libs'
            }
}


dependencies {
    ……
    //指定文件,testaar是文件名,aar是后缀
    compile (name:'testaar', ext:'aar')
    ……
}

注意:如果想在调用者中启动.aar中的Activity,需要在调用者AndroidManifest.xml中声明.aar的Activity。


问题汇总:

  • 在Android library中不能使用switch-case语句访问资源ID
    由于library的R.java中的资源ID不是常量引起的,我们可以在library中通过if-else-if条件语句来引用资源ID

参考资料:

《三件事:Aar, Manifest和Activity-Alias》 http://blog.csdn.net/shineflowers/article/details/49993283

《 Android Studio生成和引用aar》http://www.tuicool.com/articles/QfEjYbe

《在Android library中不能使用switch-case语句访问资源ID的原因分析及解决方案》 http://www.jianshu.com/p/89687f618837

《AndroidManifest合并原理》http://www.open-open.com/lib/view/open1455598198026.html

《 Android官方技术文档翻译——清单合并》http://blog.csdn.net/maosidiaoxian/article/details/42671999

《AndroidStudio出现tools:replace=”android:icon”问题》 http://blog.csdn.net/u014112893/article/details/52636348

猜你喜欢

转载自blog.csdn.net/u013806583/article/details/70158535