精华内容
下载资源
问答
  • 使用AAR注意事项 https://blog.csdn.net/qq_32452623/article/details/79220522
    展开全文
  • Android使用aar封装自定义组件

    千次阅读 2019-01-13 23:13:43
    Android开发的时候,有时候我们需要封装自定义组件,并且希望将封装好的自定义组件到处为一个lib库,实现给其他程序使用的效果,而传统的Jar包并不能很好的实现这个需求,因为传统的Jar包不能很好的支持res中的各个xml...

    在Android开发的时候,有时候我们需要封装自定义组件,并且希望将封装好的自定义组件到处为一个lib库,实现给其他程序使用的效果,而传统的Jar包并不能很好的实现这个需求,因为传统的Jar包不能很好的支持res中的各个xml和R文件,这时我们就需要打包成aar库来使用。

    生成AAR库

    首先我们需要生成一个AAR的库,这里以一个简单的自定义组件为例,来生成AAR库.

    创建AndroidLib

    首先创建一个Model

    这里要注意选择AndroidLib

    创建好Model之后,目录结构如下:

    我们的自定义组件就要在myview这个Model下进行编写

    编写自定义组件

    首先我们简单编写一个自定义组件,并且要使用自定义的属性,目标是在ImageView的基础上增加文字显示的功能,首先是自定义属性,在myview/values 下创建attrs.xml文件,编写自定义组件所需要的属性:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <declare-styleable name="MyView">
            <attr name="text" format="string"/>
        </declare-styleable>
    </resources>
    

    然后编写Java代码,就是简单的在ImageView的基础上增加绘制文字的功能:

    import android.content.Context;
    import android.content.res.TypedArray;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Paint;
    import android.text.TextPaint;
    import android.util.AttributeSet;
    import android.widget.ImageView;
    public class MyView extends ImageView {
        private String text;
        public MyView(Context context) {
            this(context, null);
        }
        public MyView(Context context, AttributeSet attrs) {
            this(context, attrs, 0);
        }
        public MyView(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
            initAttrs(context, attrs);
        }
        private void initAttrs(Context context, AttributeSet attrs) {
            TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.MyView);
            text = ta.getString(R.styleable.MyView_text);
            ta.recycle();
        }
        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
            if (text != null) {
                TextPaint paint = new TextPaint(Paint.ANTI_ALIAS_FLAG);
                paint.setColor(Color.WHITE);
                paint.setTextAlign(Paint.Align.CENTER);
                paint.setTextSize(40);
                canvas.drawText(text, getMeasuredWidth() / 2, getMeasuredHeight() - 10, paint);
            }
        }
    }
    

    到这里,基本上代码的部分就完成了,最后我们需要检查一下,lib的AndroidManifest.xml和build.gradle,将用不到的功能和依赖全部删除,因为最后我们的库是要用在其他项目上的,为了避免AndroidManifest.xml合并失败或者依赖冲突,我们需要保证我们的lib使用的是最小依赖.
    AndroidManifest.xml:

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="cfy.com.myview" />
    

    可以看到AndroidManifest中几乎是什么也没有的,然后是build.gradle:

    apply plugin: 'com.android.library'
    android {
        compileSdkVersion 28
        defaultConfig {
            minSdkVersion 23
            targetSdkVersion 28
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }
    

    可以看到也没有任何的dependencies依赖,实际上我们也应该将minSdk设置为 可以保证正常运行的最小版本.

    编译生成AAR

    对于AndroidStudio来说,只要其一编译就会声场AAR文件,我们可以使用gradle来手动编译它,使用gradle的任务就可以编译生成AAR了

    生成的路径在model下的out文件中,通常我们使用release版本的即可

    AAR 的使用

    在AndroidStudio下使用

    因为AndroidStudio都是使用的Gradle进行编译的,所以使用AAR文件非常简单

    首先将AAR文件放到项目的lib文件夹中:

    然后修改build.gradle文件,让libs文件夹中的所有aar文件均可以被添加依赖:

    只要将*.aar添加到include的列表中即可

    使用测试

    接下来测试一下:
    只需要修改布局文件,将我们的自定义组件添加上就行:

    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout 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"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        tools:context=".MainActivity">
        <cfy.com.myview.MyView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@mipmap/ic_launcher"
            app:text="Hello"/>
    </FrameLayout>
    

    可以看到我们的自定义组件已经能正确的被使用了

    Android源码使用aar

    如果我们的开发环境并不是一个单纯的AndroidApp的话,需要在源码的环境中依赖AAR文件的话,我们就需要编写android.mk文件来添加AAR文件的依赖了,首先我们在源码路径下创建一个项目,目录结构如下:

    arr文件就放在libs文件下就好了,主要是Android.mk文件的编写:

    LOCAL_SRC_FILES := $(call all-java-files-under, src)
    LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
    LOCAL_MIN_SDK_VERSION := 23 
    LOCAL_PACKAGE_NAME := AARDemo
    LOCAL_CERTIFICATE := platform
    LOCAL_MODULE_PATH := $(TARGET_OUT)/vendor/operator/app 
    LOCAL_DEX_PREOPT := false
    LOCAL_STATIC_JAVA_AAR_LIBRARIES := myview
    include $(BUILD_PACKAGE)
    LOCAL_MANIFEST_FILE := $(LOCAL_PATH)/AndroidManifest.xml  
    LOCAL_AAPT_FLAGS := \
            --auto-add-overlay \
            --extra-packages cfy.com.myview
    include $(CLEAR_VARS)
    LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := myview:libs/myview-release.aar
    include $(BUILD_MULTI_PREBUILT)
    

    使用AAR文件的时候和引入jar很像,首先是在编译时使用 LOCAL_STATIC_JAVA_AAR_LIBRARIES := myview 来指定依赖的AAR文件,接下来就是定义AAR文件了

    LOCAL_MANIFEST_FILE := $(LOCAL_PATH)/AndroidManifest.xml 的作用是指定AndroidManifest,因为AAR是一个Android的Lib,所以可能会有Activit,Service等的封装,会在AAR自己的AndroidManifest.xml中进行注册,那么就需要合并AndroidManifest,所以需要指定一下

    LOCAL_AAPT_FLAGS 是将AAR的资源文件进行合并 否则即使编译过了,在运行时也会crash的,主要是AAR的包名不要填写错了

    LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := myview:libs/myview-release.aar 则是指定AAR文件的位置,注意的是myview是给这个AAR依赖起一个名字,需要和上面的LOCAL_STATIC_JAVA_AAR_LIBRARIES := myview 对应上

    而最后我们是要编译AAR所以需要加上include $(BUILD_MULTI_PREBUILT)

    编译完成后,安装运行,就会看见我们封装的自定义组件被正确的加载了

    由于我没有添加appcompat的依赖,所以主题与AS项目略有不同,这个无关本篇博客的注意,忽略就好了~

    展开全文
  • 今天要说的是使用aar的时候遇到的一些问题。 1.将aar包放入主工程lib以后,gradle配置正确,但是访问aar里面的activity的时候出现无法打开activity组件,提示是未在manifest里面注册,试了很多方法,甚至在主工程...

    最近公司需求将一个module打包成aar提供给其他项目使用,打包的过程不表,如果不清楚的话可以上网查找,一大推相应的文章。今天要说的是使用aar的时候遇到的一些问题。

    1.将aar包放入主工程lib以后,gradle配置正确,但是访问aar里面的activity的时候出现无法打开activity组件,提示是未在manifest里面注册,试了很多方法,甚至在主工程manifest里面注册activity,结果还是打不开,最终发现是aar包里该activity所用的layout文件名和主工程的某个layout重名,改之,并且将layout里面的组件id改成唯一,问题就解决了。

    2.打包成aar以后,由于在gradle里面已将该module定义为library,application id也去掉了,所以该module不再是一个application,问题也就来了,如果之前用该module打包成apk进行过调试,那么代码里面或许会有自定义的MyApplication类。我们通过该application获取过context之类。那么在打包成aar之后,如果未做修改,去访问用到MyApplication的类的时候,会出现空指针异常,解决方案就是在用到MyApplication.getContext方法的地方换成getApplicationContext,这样一来,获取到的context就是主工程下的context,也就不会出现空指针了。

    3.如果该aar包里面有微信支付,分享等第三方库,你要在主工程中使用,要记得在gradle里面替换applicationId,或者用你主工程的包名和key去获取第三方操作的key和id

    4.在使用aar的时候最好在主工程也添加aar所用到的依赖,不然容易出现classNotFound错误。

    5.这个和第3个有点类似,如果在aar的MyAppliction里面使用了类的管理器,那么在打包成aar的时候需要将代码抽出来做个独立的类管理器,记住一点,打包成aar之后所有和application有关的东西都要检查替换,避免出现空指针异常。

    以上就是几点个人总结,希望对使用aar的同学有帮助。

    展开全文
  • androidaar使用

    千次阅读 2016-09-12 18:11:17
    前言: Android Studio中对一个自己库进行生成操作时将会同时生成.jar与.aar文件。如下是本人测试可行的方案,需要学习的可以参考。分别存储位置: *.jar:库 /build/intermediates/bundles/debug(release)/classes...

    前言: Android Studio中对一个自己库进行生成操作时将会同时生成*.jar与*.aar文件。如下是本人测试可行的方案,需要学习的可以参考。

    分别存储位置:
    *.jar:库 /build/intermediates/bundles/debug(release)/classes.jar
    *.aar:库 /build/outputs/aar/libraryname.aar

    jar、aar两者区别:
    .jar: 只包含了class文件与清单文件 ,不包含资源文件,如图片等所有res中的文件。
    .aar: 包含所有资源 ,class以及res资源文件全部包含,说白了就是Android的专属“jar”
    如果你只是一个简单的类库那么使用生成的
    .jar文件即可;如果你的是一个UI库,包含一些自己写的控件布局文件以及字体等资源文件那么就只能使用
    .aar文件。将代码打包成aar文件,可以在一定程度上加快 AndroidStudio 的速度,尤其是将 Module 打包成 aar 文件,提升的效果很显著。

    aar在AS中的使用:
    第一步:选择一个aar文件拷贝到:libs目录
    第二部:build.gradle 配置文件中更改为

    //aar
    repositories {
        flatDir {
            dirs 'libs'
        }
    }
    dependencies {
        compile fileTree(include: ['*.jar'], dir: 'libs')
        testCompile 'junit:junit:4.12'
        compile 'com.android.support:appcompat-v7:23.2.1'
        //aar
        compile(name: 'library-release', ext: 'aar')
    }
    

    **补充:**使用完Module的aar文件后,那么类库与类库的aar文件只能二选一,否则编译失败

    其他:
    一、Debug 和 Release 的区别
    Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。
    Debug 和 Release 的真正区别,在于一组编译选项。
    Debug 版本
    参数 含义
    /MDd /MLd 或 /MTd 使用 Debug runtime library(调试版本的运行时刻函数库)
    /Od 关闭优化开关
    /D “_DEBUG” 相当于 #define _DEBUG,打开编译调试代码开关(主要针对assert函数)
    /ZI
    创建 Edit and continue(编辑继续)数据库,这样在调试过程中如果修改了源代码不需重新编译
    GZ 可以帮助捕获内存错误

    Release 版本 参数含义
    /MD /ML 或 /MT 使用发布版本的运行时刻函数库
    /O1 或 /O2 优化开关,使程序最小或最快
    /D “NDEBUG” 关闭条件编译调试代码开关(即不编译assert函数)
    /GF 合并重复的字符串,并将字符串常量放到只读内存,防止被修改

    以上就是全部内容,大家可以自个去试试,喜欢的朋友可以加个关注,以后有好的文章可以及时查阅讨论,有什么问题也可以留言,或者在微信公众号“技术帮团队”上找我们。

    aar demo链接:http://download.csdn.net/detail/huang_wei_cai/9628734

    展开全文
  • android studio使用aar

    2018-02-05 10:12:12
    1. 什么是aar aar 是一个类似于jar的文件格式。但是他们之间是有区别的: jar :仅仅包含class和清单文件,没有资源文件。 aar :包含了class文件和资源文件。说白了就是Android的专属...2. 如何使用aar 想要使用a...
  • Androidaar使用

    2018-01-17 10:40:48
     这篇文章主要讲解aar的生成、使用和打包。 二、aar的生成与使用 1、aar的生成,进入android studio点击上方的build,执行第2步(整个工程)或者第3步(单个工程)。 2、 aar使用 这里主要讲解aar在...
  • Android导出aar插件供Unity使用以及通过android scheme启动unityApp
  • android导入使用aar

    2020-03-23 15:44:23
    aar使用越来越广泛,它可以包含资源文件和样式, 在as中如何配置使用如下: 在app build.gradle的dependencies标签下加入 implementation fileTree(dir: 'libs', include: ['*.jar','*.aar']) 可以看到dir就是...
  • AndroidStudio 使用aar

    千次阅读 2016-10-12 09:47:42
    说白了就是Android的专属“jar”将代码打包成aar文件,可以在一定程度上加快 AndroidStudio 的速度。尤其是将 Module 打包成 aar 文件,提升的效果很显著。新建的Module是没有这个文件夹的,执行命令 ./g
  • android studio 使用aar

    2015-11-02 09:35:53
    导出aar 首先Android Library项目的gradle脚本只需要在开头声明 apply plugin: 'com.android.library' 之后就和导出apk文件一样的方法,执行 ./gradlew assembleRelease,然后就可以在 build/outputs/aar...
  • Android Studio aar包的使用

    千次阅读 2018-04-24 10:20:13
    Android Studio生成的aar可以包含所有的资源文件,包括res资源和class文件等,如果有so文件或者依赖的jar包也会打包进去。但是如果项目有依赖的aar则不会被打包进去(这点目前无法解决,除非拿到源码重新编译),AS...
  • aar-publish-plugin:用于使用Maven Publish插件发布AndroidAAR)库的Gradle插件
  • android aar 使用

    2017-09-25 13:56:48
    一. 简介 aar是一个类似于jar的文件格式。但是他们之间是有区别的。 jar:仅仅包含class和清单文件,没有资源文件。...将代码打包成aar文件,可以在一定程度上加快AndroidStudio的速度。 尤其是将Mod
  • 然后生成aaraar在这里获取到: 然后将aar复制到app的libs目录下,最后在gradlew里面配置
  • Android Studio使用aar

    千次阅读 2018-05-30 09:50:54
    Android Studio Gradle的compile给了我们很大的方便。不过题主最近遇到了一个问题,使用了一个封装了zxing的库(barcodescanner)时,发现好几个参数都是写死了,不可以设置。不得不下载源码,本来是直接把整个...
  • 本文主要介绍AndroidStudio 如何使用aar的资料,这里整理了详细的资料,帮助大家学习理解此部分的知识,有需要的小伙伴可以参考下
  • Android 打包aar给unity3d使用 项目心得

    千次阅读 2017-06-24 20:50:48
    Android 打包aar给unity3d使用 项目心得步骤 制作androidproject 修改build.gradle配置 打包aar 1.混淆打包aar 2.jar包导出 3.在其他的android工程引入aar 导入unity项目 运行unity3d输出apk包 新建一个project ...
  • 我正在使用Android Studio.我正在写一个名为detector的Android库.它在创建它的项目中完美运行.compile project(':detector')我想将它生成的AAR文件导入另一个项目.我这样做:File > New > New Module > ...
  • 选择Android Library 写好程序后,Build-Rebuild Project,就可以在/build/outputs/aar/ 下生成对应的aar。 默认生成的debug,如果要生成release, 打开Terminal,输入命令: gradlew assembleRelease ...
  • opencv-android.aar

    2018-01-18 15:04:50
    自己动手打包的opencv-android.aar文件,可用来做安卓图片识别,安卓图片匹配,安卓图片矩阵获取.亲测可用拿走不谢.opencv功能使用可参照大神示例:http://blog.csdn.net/qq_18870023/article/details/59481947
  • 某些花里胡哨的业务写完的话,想要打包aar 第一步,我们要把一些东西给替换掉,打开AndroidManifest 首先要把这个给注释掉,如过不注释掉要是导入到别的项目会出现两个项目的入口,下图就是没有注释掉的后果 右下角...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,585
精华内容 634
关键字:

android使用aar