aar打包_aar打包 so没打进去 - CSDN
精华内容
参与话题
  • 我们写了一个项目A,要打包aar文件,给第三方公司使用,但是我们的项目A里,用的有另外公司的aar文件。也就是aar文件里嵌套aar文件。这种情况怎么打包呢?   把工程app下的build.gradle的 apply plugin: '...

    我们写了一个项目A,要打包成aar文件,给第三方公司使用,但是我们的项目A里,用的有另外公司的aar文件。也就是aar文件里嵌套aar文件。这种情况怎么打包呢?

     

    把工程app下的build.gradle的

    apply plugin: 'com.android.application'

    改为

    apply plugin: 'com.android.library'

    并把app下的build.gradle的

    applicationId

    删掉。

    同时,要把项目AndroidManifest.xml里的启动页面的<intent-filter>删掉,把android:icon="@mipmap/ic_launcher"也删掉,否则会出现两个APP图标

    然后Android studio 工具栏Build->Rebuild Project,就可以了。如果要打上签名,要在Build->Edit Build Types设置签名,如下图

    打包出来,发现打出的是app-debug.aar文件。

    如果想打app-release.aar文件,则在Terminal命令行里输入gradlew assembleRelease指令,就生成release.aar了

    生成release.aar文件后,要测试生成的aar文件能用不。建一个新的工程,把release.aar加到libs里,会发现,被嵌套的aar文件(项目A中使用的第三方的aar文件)里的方法找不到。然后找到工程->app->build->intermediates-exploded-aar,发现只有新加进去的aar文件包名,没有被嵌套的aar文件包名。

    解决方法是,把被嵌套的aar文件,放到新建工程的libs下,然后在build.gradle里重新配置,就可以了。aar的配置方法,网上很多,自己找下吧,这个不是难点,就不详写了。

     

    转自:https://blog.csdn.net/pbm863521/article/details/54317757

    展开全文
  • 在android开发中,我们有时候需要将一个项目作为一个依赖,并且能够使用其资源文件和界面,这个时候就需要将我们创建的moudle打包成一个aar文件.具体打包步骤如下:1.创建一个moudle2.修改moudle中的build.gradle文件,将...

    在android开发中,我们有时候需要将一个项目作为一个依赖,并且能够使用其资源文件和界面,这个时候就需要将我们创建的moudle打包成一个aar文件.具体打包步骤如下:

    将moudle打包成aar包

    1、创建一个moudle


    2、修改moudle中的build.gradle文件,将其中的com.android.application修改为com.android.library,并且将applicationId "demo.com.ruite.mymoudle"这一行删掉

    修改前:


    修改后:


     3、编译我们的module,生成release版本的aar,注意千万不要是debug版本的,

    点击最右边的gradle面板,选择我们的module进行编译,CommandLine 指令为assemble(默认生成debug和release)


    4、查看module下的build/output文件夹,即可看到生成的aar文件,我们一般选用那个release版本的aar文件即可



    项目中引入本地aar文件

    1.将本地的aar文件复制到项目中lib中


    2.修改build.gradle文件,注意不是project的build.gradle文件,是moudle的build.gradle文件


    3.新增内容如图所示


    需添加内容如下:

    repositories  {
        flatDir{ dirs 'libs'  }
    }
    
    compile(name:'mymoudle', ext:'aar')
    至此,aar文件添加到项目完成引入

    参考博客:android 解决studio生成aar包并在其他工程引用aar包的坑,不需要任何gradle配置

    展开全文
  • Android-打包AAR步骤以及注意事项

    千次阅读 2019-06-07 01:03:48
    简介最近因为项目的要求,需要把开发的模块打包aar,供其他项目调用,在搞了一段时间后,发现这里还是有很多需要注意的地方,所以记录一下,帮助大家不要走弯路。首先何为aar...
        

    简介

    最近因为项目的要求,需要把开发的模块打包成aar,供其他项目调用,在搞了一段时间后,发现这里还是有很多需要注意的地方,所以记录一下,帮助大家不要走弯路。


    首先何为aar包?


    640?wx_fmt=png


    jar与aar的简单区别:

    • *.jar:只包含了class文件与清单文件 ,不包含资源文件,如图片等所有res中的文件。

    • *.aar:包含所有资源 ,class 以及 res 资源文件全部包含


    新工程(无依赖)打包AAR的步骤


    1.新建Library


    640?wx_fmt=png




    640?wx_fmt=png


    然后一路next+finish就新建成功了.


    将要打包的文件都按照文件夹的位置放入你的Module中,然后直接点击build-->Make Moudle app


    640?wx_fmt=png


    打包成功后会在对应的路径下生成aar


    640?wx_fmt=png


    当然了,这些应该应该都不是我们需要的, 因为开发项目中一定会有所依赖的。


    而且也肯定不是空的项目。


    成型的项目(有依赖)如何快速打包AAR


    我们可以直接在项目中New一个Moudle 然后把项目复制到Moudle中,或者重新复制出来一个当前项目,然后在复制的项目中直接把此项目修改成AAR。


    我就说一下第二种把,也就是把复制项目直接修改成AAR,我们需要做如下改动:
    1. 修改app下的bulid gradle文件:
    把apply plugin: 'com.android.application'修改成apply plugin: 'com.android.library'


    640?wx_fmt=png


    2. 注释调defaultConfig下的applicationId


    640?wx_fmt=png


    3. AndroidManifest.xml文件,修改application


    640?wx_fmt=png


    并且注释调首先启动的Activity启动的action

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


    4.如果你自己自定义了Application,需要去掉,因为AAR中是没有Application的,那问题来了,我们原来在Application中的初始化代码怎么办?这个简单,我们可以单独写一个Options类,提供给调用者,让他传递过来application,这样我们就可以在这个类中做一些初始化操作了。


    640?wx_fmt=png


    调用者在他的application中传入application:


    640?wx_fmt=png


    然后直接build-->Make Moudle app 就可以生成aar了!


    注意事项

    1. 主项目需要依赖AAR中所依赖的远程库,否则会出现ClassNotFound异常
    这里也许某个依赖库你们的版本会发生冲突,这就需要你们协调了

    2. 资源命名最好统统加上你的项目名字前缀,比如图片资源、string、color、dimens、layout等等,反正res目录下所有文件最好都使用统一的加前缀命名,防止跟宿主app下的资源重复,因为aar引用跟源码引用起到的效果一样一样的,所有很容易出现资源重复引用的问题,所以加上前缀非常有必要。

    3. 如果该aar包里面有微信支付,分享等第三方库,你要在主工程中使用,要记得在gradle里面替换applicationId,或者用你主工程的包名和key去获取第三方操作的key和id  
    以分享为例,如果你清单文件中的分享KEY与主项目中的build gradle文件中的分享KEY不同的话,就会包清单文件异常的。

    4. butterknife需要统一用8.4.0以上的版本,不然报错 ;依我的建议,最好不用,否则有你好受的哈!
    5. 如果在aar的MyAppliction里面使用了类的管理器,那么在打包成aar的时候需要将代码抽出来做个独立的类管理器,记住一点,打包成aar之后所有和application有关的东西都要检查替换,避免出现空指针异常。
    6. AAR模块用butterknife需要把资源R改为R2(批量替换)
    7. 布局文件不要重名,否则会报找不到Id的异常


    今天就分析到这里,下次继续新内容!


    推荐阅读

    Android 中.aar文件生成方法与用法


    640?wx_fmt=jpeg

    1995 年 5 月

    MySQL 正式发布

    展开全文
  • Android 完整项目打包aar 详解

    万次阅读 2018-03-19 23:24:28
    项目背景,公司要将完整APP打包AAR包,供其它厂商内嵌。外部厂商提供壳工程和相应的Application调用我们提供的aar包一路走来踩了一堆坑。。。这里先简要解释一下相关概念1 什么是AAR包? AAR包相比于jar包,区别在...

    项目背景,公司要将完整APP打包成AAR包,供其它厂商内嵌。外部厂商提供壳工程和相应的Application调用我们提供的aar包
    一路走来踩了一堆坑。。。


    这里先简要解释一下相关概念

    1 什么是AAR包? AAR包相比于jar包,区别在哪儿?

    aar包含所有资源,class,xml布局文件以及res资源文件全部包含。注意是全部。
    jar只包含了class文件与清单文件,不包含资源文件,如图片等所有res中的文件。
    捎带解释一下so库,

    2 什么是so库?什么是ABI?相关的处理器型号在构建APP时有什么区别?

    android系统目前支持以下七种不同的CPU架构:ARMv5,ARMv7 (从2010年起),x86 (从2011年起),MIPS (从2012年起),ARMv8,MIPS64和x86_64 (从2014年起),每一种都关联着一个相应的ABI。

    应用程序二进制接口ABI(Application Binary Interface)定义了二进制文件(尤其是.so文件)如何运行在相应的系统平台上,从使用的指令集,内存对齐到可用的系统函数库。

    so库的好处:

    • so机制让开发者最大化利用已有的C和C++代码,达到重用的效果,利用软件世界积累了几十年的优秀代码;
    • so是二进制,没有解释编译的开消,用so实现的功能比纯java实现的功能要快;
    • so内存分配不受Dalivik/ART的单个应用限制,减少OOM;
    • 相对于java代码,二进制代码的反编译难度更大,一些核心代码可以考虑放在so中。
    在Android Studio构建APP时可以选择构建时匹配的CPU架构。在project的build.gradle可以明确指定,代码如下

    在buildType标签下声明

    ndk{

    abiFilters "armeabi","armeabi-v7a","x86"

    }

    以上代码可以指定在构建时,生成支持这三类CPU的so库。

    so库的load:

     1:相对路径load: System.loadLibrary("media_jni"); 其中media_jni名字会被自动替换成libmedia_jni.so

    在使用相对路径load时,需要注意相应的so库是否被打入到 aar包的libs目录下。此处需要注意ABI类型

    2: 绝对路径load:System.load("/绝对路径/libmedia_jni.so");

    绝对路径可以避免这个问题,但是要确保具有相应路径的访问权限,在接入AAR时候,假设合作方是厂商ROM级别的,部分路径需要提前协调。

    jni层的方法对应关系:

    全路径,将.置换为_ 例如,假设当前函数native_init函数位于android.media这个包中,它的全路径名应该是android.media.MediaScanner.native_init,而JNI层函数的名字是android_media_MediaScanner_native_init。

    完整项目改造生成aar包的过程:

    1 将原先module下的Application改为Library,正常调用assembleDebug 或 assembleRelease时就会在该module下的build/output目录下生成aar文件。

    1.1 项目代码中的switch语句需要改为if语句

    1.2 修改Manifest.xml文件

    2 原有项目所依赖的jar包会被正常打包进aar中,但原项目依赖的aar则不会打包进aar

    2.1 以外部compile形式所依赖的包,也不会被打包进aar

    2.2 记得不要重复引用,避免壳工程引用的jar与打包好的aar冲突

    3 声明具体支持的so库类型

    3.1 最好在构建过程中声明所支持的CPU类型。

    Android系统的匹配过程为从高到低,向下兼容,例如:armeabi-v7a类型的CPU支持armeabi

    3.2 如果不在BuildType中声明,则默认支持所有类型的so库文件,通过反编译在aar中的lib目录下可以看到所支持的SO库类型

    3.3 部分so库在不声明的情况下,默认打在armeabi下,这样会导致armeabi-v7a类型的包找不到相应的so库文件。解决办法就是强制声明为armeabi类型

    3.4 注意so库存放的路径

    3.5 so库本身是含有包名的,在jni使用的时候,需要将so库方法的名称,与调用so库的代码包名一致

    3.6 外部调用aar的壳工程,一般来说,会从aar中使用DexClassLoader,拷贝aar中的so库到相应的目录中。可以使用adb shell 到壳工程指定目录下查看是否so库成功拷贝

    3.7 so库可以存放在aar的jniLibs下,也可以存放在壳工程的jniLibs和libs下。

    3.8 遇到一次so库崩溃,信息与下段信息类似:

    http://blog.csdn.net/tankai19880619/article/details/9004619

    在其中有相应的解决办法,此处感谢博主,运用文中方法,定位了问题。

    4 Application参数的传递问题。

    每一个Android App都有一个application context,这个参数需要壳工程传递给我们,调试的时候可以在壳工程的Manifest.xml中指定默认的Application.

    并在默认的Application中初始化aar,

    5 混淆

    aar包也可以指定混淆方式,在提供给对方时,我们需要将代码混淆,在厂商发布时,也需要混淆,这样就存在二次混淆后,AAR包找不到相应类的问题。

    解决方法可以让厂商在二次混淆时,keep住我们aar相关代码

    6 路径获取

    留意相关路径的获取,在普通的Appliaction中,数据默认存储在 /data/data/packageName/中,当aar内嵌在其他应用中,存储路径跟随主工程,在获取数据时路径切记不能写死。

    7 Assert资源获取

    因为是内嵌在其他应用中,原本APK中的Assert目录内的资源可能找不到。解决方法是,可以将Assert目录内的资源打包成一个ZIP文件放在 /RAW目录下。
    在项目初始化的时候,解压到指定目录下。

    使用的时候在AssertManager中使用绝对路径获取资源
    在于前端页面交互上,JS相关代码及资源一般也存放在Assert目录下,在webview.load()时,可以通过 file:/ 绝对路径 ,来加载

    PS:Assert 目录与 /raw 目录的区别:访问方式,目录结构,大小写,压缩方式等。

    8 第三方登录

    因为微信微博等三方登录需要使用PackageName申请APPID,APPKEY, 需要使用壳工程的packageName。

    9 常见BUG

    9.1 java.lang.NoClassDefFoundError
    NoClassDefFoundError错误的发生,是因为Java虚拟机在编译时能找到合适的类,而在运行时不能找到合适的类导致的错误。例如在运行时我们想调用某个类的方法或者访问这个类的静态成员的时候,发现这个类不可用,此时Java虚拟机就会抛出NoClassDefFoundError错误。与ClassNotFoundException的不同在于,这个错误发生只在运行时需要加载对应的类不成功,而不是编译时发生。

    9.2 jar包引用重复

    9.3 contentProvider在注册时出现重名情况

    9.4 注意不要在壳工程的Activity中传递Context,可能出现Context为NULL的情况,最好在 壳工程的Application来初始化Context

    9.5 java.lang.ExceptionInInitializerError 

    原因如果你在别的类调用getInstance,就会报错ExceptionInInitializerError。这是因为类加载时不会为实例变量赋值,对象创建时不会为静态变量赋值。我们调用getInstance时,此类就开始加载,加载的时候不会为实例变量赋值,但是会按顺序给静态变量赋值。需要检查变量初始化过程。

    9.6 系统切换广播监听

    在系统配置改变时,例如横竖屏切换,会导致Activity生命周期的改变。在开发过程中碰到一个问题,在用户将应用点击home键置于后台的情况下切换语言,会导致原有的注册的receiver报错。

    排查后发现,在语言切换且应用存活的情况下,并不会走到应用的onDestory方法,而是重新走一次onCreate。

    这就导致了注册两次而报错。


    展开全文
  • AS 将模块打包aar

    千次阅读 2017-02-28 11:05:33
    在平时开发中,我们经常引入的不是.jar就是.aar,它们两者之间有哪些区别? *.jar:只包含了class文件与清单文件,不包含资源文件,如图片等所有res中的文件。 *.aar:包含所有资源,class以及res资源文件全部包含 ...
  • aar打包

    2018-12-20 23:16:15
    android studio lib aar打包一、修改项目包名aar打包 一、修改项目包名 只需要修改module的gradle配置文件里面的applicationId即可 aar打包 双击下图库module的assemble即可在项目的build下考生成的aar文件,需要...
  • 打包过程: 1.打开现有可运行工程的build.gradle,将  apply plugin: 'com.android.application' 改为  apply plugin: 'com.android.library' 2.将app的build.gradle中的 applicationId 删除 3.打开...
  • 开发中有时候需要我们自己处理一些sdk,以jar包或者aar包的形式提供给其它人员来使用。如果你没接触过,在第一次使用时一定要查阅不少资料,从我个人来说,这个过程耗费了很多时间,你得查找,得判断资料的可靠性等...
  • 前段时间需要做一个sdk项目,正苦闷用什么打包方式,要是使用jar打包,jar只能打包class文件,要想把资源文件打包进去 比较麻烦的意见事情,界面不多的话可以使用反射调用,把资源文件都通过这个反射的R引用出来。 ...
  • Android Studio Project 中Module打包aar

    万次阅读 2017-02-13 10:28:28
    在公司开发中遇到这样需求,将一个独立的应用...第二种是将被嵌入的应用打包aar 包,这也是 Android Studio 的一种新特性,可以将应用所使用的资源性文件一起打包; 如果Project 中 Module 是一个应用,则在 Module
  • 如何用Android Studio将源码打包AAR文件,并且AAR文件中包含源码。类似与jar文件打包后可以看到源代码一样。
  • 打包依赖.aar文件以及坑总结

    万次阅读 2017-08-01 14:13:40
    AAR 文件的单模块打包和多模块打包,以及引入到项目中的两种方式,以及常见遇到的问题...
  • jar包只能打包Java文件,但是如果你的功能模块中含有比较多的资源文件,图片、布局文件等就不能打包aar的格式了。如果资源文件很少,打成jar包还是比较简便的。 1.无其他依赖的模块打包成单个aar文件1.新建工程,...
  • 打包aar不包含依赖jar文件

    千次阅读 2016-12-21 16:05:02
    在写libs module的时候,打包的arr的realese版本是包含libs目录下的文件,这时候你引入这个aar,可能会和你现有引入的jar文件冲突,在打包aar的时候可以设置不引入libs文件,很简单看一下你的lib module的gradle文件...
  • Android aar打包碰到的问题

    千次阅读 2016-01-08 18:07:55
    Android aar打包碰到的问题及解决方法
  • 其实每次as编译,model都会生成aar文件,比jar包更强大,他可以包含资源文件,还有第三方引用jar如下图 2.aar跟jar使用方式一样直接放libs包下面,但是需要注意一点,如果你同时还引用so文件,就必须创建jniLibs...
  • gradle 编译打包并使用 aar

    万次阅读 2014-06-25 10:36:03
    一般在开发过程中我们会将一些公共组件库进行打包使用,在android下打包
  • 在网上看到一些Androidstudio 打包生成aar的方法: 界面操作 命令行操作 gradle clean build 以上两种方法,前提Module是Library,调用系统build重新构建工程,完成后会在Module 模块下build----&gt;...
  • 资源冲突有时候我们在集成第三方aar包时会发现aar里面引用的资源和自己工程的里面的某些资源文件名称一样,这会在打包时会报错,并提示某个资源文件重复
  • AndroidStudio自定义编译的aar和apk文件名
1 2 3 4 5 ... 20
收藏数 7,464
精华内容 2,985
关键字:

aar打包