Android-如何exclude aar包中的某个jar包

构建优化:精通Gradle依赖排除的艺术 通过本文的详细步骤和代码示例,你应该能够掌握如何在Gradle中配置项目依赖排除。依赖排除是Gradle依赖管理中的一项重要功能,它可以帮助开发者避免依赖冲突,优化构建性能。依赖排除是Gradle提供的一项强大功能,它为构建过程中的依赖管理提供了精细控制的手段。希望本文能够帮助你在项目构建中更加灵活和高效地处理依赖问题,无论是简单的版本排除还是复杂的依赖优化,都能够运用Gradle的功能达到最佳效果。注意:本文中的代码示例为教学目的,实际应用中应根据具体需求和项目标准进行选择和实现。 阅读详情
AI摘要

本文介绍两种从AAR包中移除特定JAR包的方法:一是当目标JAR位于AAR外部时,可通过Gradle配置排除;二是当目标JAR嵌入于AAR内部的classes.jar中时,则需手动解压AAR,删除classes.jar中的目标文件,再重新打包。

场景一

要移除的jar包不在aar包中的classes.jar中

直接把aar包里的Jar打包的时候给去掉,就像下面这这样。注意,要使用exclude module这种方式,直接使用exclude group方式没有效果。exclude group的方法适用于exclude JAR包中的文件。

    implementation(name: '×××××××aar包', ext: 'aar') {
        exclude module: 'gson'
    }

场景二

要移除的jar包在aar包中的classes.jar中

这个时候,使用exclude方法已经不能生效了。你可以使用下面的通用方法

  1. 解压aar文件到tmpDir目录下
    unzip ×××.aar -d tmpDir
  2. 找到classes.jar包,用压缩工具打开,删除目标文件
  3. 将tmpDir重新打包成一个新的aar
    jar cvf ×××NewLib.aar -C tmpDir/ .

**补充:**我在Ubuntu下直接使用压缩工具打开aar包,然后删除其中的重复的文件,这个方法也是可行的。

Android Studio生成aar包全流程与优化实践 在Android模块化开发中,aar(Android Archive)作为包含资源文件和Manifest的二进制分发格式,是组件化架构的核心载体。与标准jar包相比,aar专为Android平台设计,能够封装res资源、assets目录和JNI库等元素。通过Gradle构建系统,开发者可以配置consumerProguardFiles实现代码混淆的自动传递,使用resourcePrefix避免资源冲突。在电商App等大型项目中,合理使用aar模块能使团队协作效率提升40%以上。本文详解从环境配置、工程结构设 阅读详情

相关推荐

Android AAR/JAR依赖冲突处理:Gradle排除、强制版本与打包实践

在Android工程中,依赖管理是一项基础而关键的实践。Gradle通过版本仲裁机制处理传递依赖,但面对AAR与JAR包中的重复类、资源文件冲突,以及运行期类加载异常,开发者往往需要深入理解依赖树结构。掌握dependencies、dependencyInsight等命令,能够快速定位冲突来源;而exclude、resolutionStrategy、packaging排除等工具,则为不同场景提供了灵活的解决方案。无论是集成第三方SDK、维护多模块工程,还是构建AAR组件,合理处理依赖冲突直接关系到构建效率与

weixin_29173777的博客 250

gradle依赖冲突的解决方式以及开发中遇到的相关问题

在当前项目开发过程中引入了了腾讯云对象存储COS的库文件之后,implementation 'com.tencent.qcloud:cosxml:5.5.5'项目死活都跑不起来;报了以下的错误: 完整的错误日志如下: java.lang.NoSuchMethodError: No virtual method getHttpUrlChecked(Ljava/lang/String;)Lokhttp3/HttpUrl; in class Lokhttp3/internal/Internal; or

热爱技术 6774

Android 手动删除 AAR jar 包 中的文件

A.aar B.aar 有类冲突;使用 exclude 排除本地aar无效;所以要删除其中一个aar中导致冲突的包或类;直接解压aar然后再解压jar,删除冲突的类后 ,再使用指令打包jar和aar;一定要使用指令打包jar和aar,zip改后缀成aar或jar是不可以的;

编程进化论 481

Android 查看并解决重复依赖

上面这些公司都是时下最受欢迎的互联网大厂,他们的职级、薪资、福利也都讲的差不多了,相信大家都是有梦想和野心的人,心里多少应该都有些想法。也相信很多人也都在为即将到来的金九银十做准备,也有不少人的目标都是这些公司。我这边有不少朋友都在这些厂工作,其中也有很多人担任过面试官,上面的资料也差不多都是从朋友那边打探来的。除了上面的信息,我这边还有这些大厂近年来的面试真题及解析,以及一些朋友出于兴趣和热爱一起整理的Android时下热门知识点的学习资料。

2401_84132589的博客 1470

Android 如何实现exclude aar包中的某个jar包

主要介绍了Android 如何实现exclude aar包中的某个jar包,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

详解Gradle依赖冲突解决方式

问题 在Android开发中,相信遇到关于版本依赖的问题的同学有不少。虽然Android Studio一般都会自动帮我们去重,但是有时候去重失败了还是需要手动处理。在这里总结下自己长期遇到的各类问题的解决方式。 为了方便看效果,我们改下gradle解决策略为有版本冲突时自动失败,如下: configurations.all { resolutionStrategy { failOnVersionConflict() } } 当我们同时依赖不同版本rxjava时编译会报错如下: 解决方案 1.统一版本管理 当一个project下有多个module或library时很适合使

Android 删除aar中的一个类 aar包冲突 aar类冲突 删除aar中的一个包

Android aar有类冲突;使用 exclude 排除本地aar无效;所以要删除其中一个aar中导致冲突的包或类;

Choi晨的博客 790

NVMe-MI --- Message Servicing Model(消息服务模型)

本文主要介绍NVMe-MI消息服务模型,两个主要类别是请求消息和响应消息。并介绍带外机制消息服务状态机。

智小星的博客 2014

android 解决aar 与jar包冲突

前言 项目中会集成很多的三方以及依赖,例如地图,推送,等等 ;最让我们头疼的就是出现冲突,接下来我将总结我在日常工作中遇到的冲突,以及是如何解决冲突的。 异常 我们在runapp的时候发生异常如下: 根据报错日志我们可以分析对应的查找是哪个类发生了冲突: 解决方案 当两个三方SDK使用相同包名相同类名的文件时,我们需要手动解决这个冲突,具体实现方法为将Jar包重命名为zip文件并解压。 重...

wj_12113114的博客 5157

Windows11开机必看:3种方法跳过联网激活(含最新OOBE命令)

本文详细介绍了Windows11新机开箱时绕过联网激活的三种实用方法,包括任务管理器终止进程法、命令行强制终止法和最新的OOBE\BYPASSNRO命令法。特别推荐使用微软官方预留的OOBE命令,操作简单且无副作用,帮助用户快速完成系统设置。

weixin_28366353的博客 1630

Ubuntu22.04通过DKMS包安装Intel WiFi系列适配器(网卡驱动)

Ubuntu安装Intel WiFi系列适配器(网卡驱动)

lu_linux的博客 2602

android自定义jar包和aar包,并引用

第一步:用android studio打开一个工程,然后新建一个Module,新建Module时候选择Android Library,后面按新建普通工程操作 第二步:确保Module里面的.gradle文件夹里面,是红色标注的内容 (1)apply plugin: 'com.android.application' 改为:apply plugin: 'com.and...

ohyee2005的博客 737

深入解析DDR5 SDRAM的ODT模式:时序图与状态表实战指南

本文深入解析了DDR5 SDRAM的ODT模式,详细阐述了其五种工作状态及其在读写操作中的动态切换逻辑。通过解读JESD79-5标准中的时序图与状态表,并结合模式寄存器配置实战,为硬件工程师和爱好者提供了优化信号完整性、提升系统稳定性的关键指南。

gpu4optimizer的博客 699

android关于jar包重复、jar包类重复问题的解决

经常的,在android 开发中,项目普遍的喜欢引入大量的第三方库,在完成项目功能需求的同时,也可以减少自己项目的代码量。何乐而不为。 常用的引入第三方库大致可以分为两种方式,1、以jar包,aar包、放在libs、jniLibs目录下,或者以library Module的形式放置在工程目录下。2、以Gradle依赖的远程依赖的形式下载引入。 因此复杂的依赖关系容易产生重复导入jar包,重复引用jar包类的问题。对此,也有响应的几个方法进行处理。 jar包重复导入 主要有本地 Jar 包重复嵌入和== Gr

黎明的博客 1万+

python:实现brutefore破解wifi(附完整源码)

python:实现brutefore破解wifi(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 5725

火灾图像检测识别:cnn卷积神经网络 Adaboost 支持向量机 随机森林 决策树 完整代码数据

火灾图像检测识别:cnn卷积神经网络 Adaboost 支持向量机 随机森林 决策树 完整代码数据

864

Android aar或jar中删除某个包或类

情况是这样的 我的项目中使用到了百度广告的SDK:BaiduMob1.jar 项目中使用到一个第三方的SDK,这个SDK中的一个aar里面也包含了BaiduMob2.jar BaiduMob1.jar和BaiduMob2.jar是不同版本的广告jar包,但是里面的包名是一样的com.baidu.mobs,这个时候会导致一个冲突: Error: Program type already presen...

陈铭卓的博客 1万+

NX二次开发常用函数——从一个坐标系到另一个坐标系的转换(UF_MTX4_csys_to_csys )相同体坐标转化

本文介绍了在项目开发中实现坐标转换的方法,重点解析了两个关键函数UF_MTX4_csys_to_csys和UF_MTX4_vec3_multiply的使用。通过4个变换矩阵(transform1-4)实现工作坐标系与绝对坐标系之间的相互转换,并以圆柱体为例详细说明了坐标转换的具体实现过程,包括原点、X/Y轴方向的转换处理。相比之前采用的if-else判断方法,这种矩阵转换方式在代码复杂度和运行效率上都更具优势。

weixin_47753171的博客 600

Android studio 生成aar包,不把第三方jar打进去的两种方式

一、第一种方式 1、新建一个mylibs文件夹(名字只要与工程里的libs不冲突就行),把不参与打包的jar包放进去 2、在gradle中添加依赖,依赖方式使用 compileOnly,compileOnly表示只参与编译,不参与打包 repositories{ flatDir{ dirs 'libs' dirs 'mylibs' } }...

he先森的博客 5957

RK3399快速上手 | 01- 开发环境搭建(固件烧写、编译工具链安装、kernel编译)

一、编译工具链 编译工具链使用gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu。 下载地址: https://releases.linaro.org/components/toolchain/binaries/6.3-2017.05/arm-linux-gnueabihf/ wget https://releases.linaro.org/components/toolchain/binaries/6.3-2017.05/arm-linux-gnueabi

Mculover666的博客(嵌入式) 8836

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

android studio 打so包、jar包、aar包

使用前面https://blog.youkuaiyun.com/qq_15255121/article/details/118809279?spm=1001.2014.3001.5501写的native代码 1、打so 修改module的build.gradle externalNativeBuild { cmake { cppFlags "-std=c++11" abiFilters 'armeabi-v7a

qq_15255121的专栏 1041

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

如何解决直播aar下面的classes.jar的子包和IM下面的jar包冲突的问题??

集成腾讯系第三方的直播与IM产生了许多冲突,找到了一份解决这种冲突的解决方案,感谢原博主 转自:https://blog.youkuaiyun.com/HuangLin_Developer/article/details/80614497 场景一 要移除的jar包不在aar包中的classes.jar中 直接把aar包里的Jar打包的时候给去掉,就像下面这这样。注意,要使用exclude module这种...

Android_Glimmer的博客 1454

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

jar和aar在Android Studio中的生成和使用

jar和aar在Android Studio中的生成和使用

deeny的博客 1306

android studio 创建raw,Android studio module library生成 jar包和生成含有raw资源文件的aar包问题...

android studio 创建了一个Module生成jar包,这个module中有引用一些第三方的类库,比如 gson,volley等。打包成的jar 是不包含raw资源文件的,但是打包成的aar包是可以含有raw资源文件的,所以要使用含有raw资源文件,那就可使用aar包。但是生成的jar包里,并没有将gson,volley等第三方类库放入。错误如下: 主要原因是在生成jar时候没有把第三方...

weixin_35159324的博客 625

Android studio 将 Module 打包成 Jar 包

  整理记录 AndroidStudio 把一个 module 项目打包成 jar 包。 一、默认自动生成的 jar 包   众所周知 android studio 会在library所依赖的 app运行 或 build 之后自动生成 jar 包,路径为 Module根目录/build/intermediates/bundles/debug or release/classes.jar,...

WGH100817的博客 139
上一篇: 解决-Gradle: build failed to resolve aar library dependency
下一篇: Android-获取apk的包名以及入口Activity
Huang-Lin
博客等级 码龄10年 20粉丝 58原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值