我想在Android Studio中为我的库创建一个aar文件,我会选择jar选项,但我的库有资源.
知道如何从库中创建aar文件吗?
我知道这个问题:将本地.aar文件添加到我的gradle构建中,但该解决方案对我不起作用.
我尝试将此语句添加到我的build.gradle文件的顶级:
repositories {
mavenCentral()
flatDir {
dirs 'libs'
}
}
Run Code Online (Sandbox Code Playgroud)
我还把slidingmenu.aar文件放入/libs并在dependencies部分中引用它:compile 'com.slidingmenu.lib:slidingmenu:1.0.0@aar'但它根本不起作用.
我也试过compile files('libs/slidingmenu.aar')但没有运气.
我错过了什么?有任何想法吗?
PS Android Studio 0.8.2
android android-studio build.gradle android-gradle-plugin aar
我一直在阅读一些关于Gradle作为Android应用程序的标准构建系统的新采用的文章.好吧,来自标准的Java开发,我通常依赖于jar文件来构建我的项目.然而似乎安卓也有AAR包,这是相当于DLL在Windows操作系统文件,提到这里:
首先,您必须意识到Android平台不允许应用程序级别的"共享库".在"传统"编程语言平台,C,C++,Java中,您可以命名它,我们有这种共享运行时库的机制.(例如,Windows上的DLL,Unix上的DSO,JVM上的Jar等).但是,在Android上,除非您是Google或手机制造商,否则您无法做到这一点(请参阅下面的脚注1).作为应用程序开发人员,这可能是一个基本限制.在构建时和运行时"共享"或"重用"代码是软件工程实践中非常重要的一部分.由于上述限制,这在Android上相当困难(并非不可能,更难).
但是,我对这个概念有些怀疑.我的意思是,开发人员何时应该对其应用程序中包含aar依赖项感兴趣?这种依赖关系是否收紧到SDK最低版本?
例如,在一个项目中,我访问一个COM端口,我使用NDK预编译 .so库.如果我想分享这个实用程序,我是否必须创建一个aar?
情况:
我打算使用Java库,我只有一个来自Maven存储库的AAR文件,但我需要JAR文件.
背景故事:
我试图编译一个库,但它的Gradle结构不稳定.所以我要求一个编译的jar文件,它的开发人员从一些Maven存储库递给我一个aar文件(开发人员无法编译自己的项目).Gradle配置很乱,它依赖于多个库,Gradle抛出了一些例外.
我尝试在我的IDEA IDE中使用它,但它看不到它.一个库项目应该能够编译成一个jar文件,对吧?
问题:
我该怎么做才能将AAR文件转换为JAR文件?
我已经调查了一段时间,可能看到这里最流行的答案与aar和transitive依赖关系有关,但不知何故,我仍然不清楚如何使这个工作.
所以:
我有给定gradle配置的android库:
apply plugin: 'android-library'
apply plugin: 'android-maven'
version = "1.0.0"
group = "com.somepackage"
buildscript {
repositories {
mavenCentral()
mavenLocal()
}
dependencies {
classpath 'com.github.dcendents:android-maven-plugin:1.0'
}
}
android {
compileSdkVersion 19
buildToolsVersion '19.0.3'
defaultConfig {
minSdkVersion 10
}
}
repositories {
maven { url 'http://www.bugsense.com/gradle/' }
}
dependencies {
provided 'com.google.android.gms:play-services:+'
provided 'com.android.support:appcompat-v7:+'
compile 'com.google.code.gson:gson:2.2.4'
compile 'com.bugsense.trace:bugsense:3.6'
compile 'commons-net:commons-net:3.3'
}
Run Code Online (Sandbox Code Playgroud)
然后我将它部署到本地maven repo gradle install.部署库的POM文件如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>com.sprezzat</groupId> …Run Code Online (Sandbox Code Playgroud) 我用gradle得到了这个奇怪的错误,请帮助我!
/.../app/build/intermediates/res/debug/drawable-xxhdpi-v4/ic_launcher.png:
error: Duplicate file
/.../app/build/intermediates/res/debug/drawable-xxhdpi/ic_launcher.png:
Original is here. The version qualifier may be implied.
Error:Execution failed for task ':app:processDebugResources'.
com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException:
Process 'command '/.../sdk/build-tools/22.0.1/aapt'' finished with non-zero exit value 1
Run Code Online (Sandbox Code Playgroud)
在它正常运行之前,但是因为我把classpath com.android.tools.build:gradle:1.2.2,这导致我错误
所以我创建了一个Android-Library,并成功地将其编译成.aar文件,我称之为aar文件:"projectx-sdk-1.0.0.aar"现在我希望我的新项目依赖于这个aar所以我所做的就是关注这篇文章:http:// life. nimbco.us/referencing-local-aar-files-with-android-studios-new-gradle-based-build-system/
但由于我没有得到预期的结果,这篇文章让我感到困惑:
aar的包名是:com.projectx.photosdk并调用里面的模块sdk
这是我目前的项目结构:
|-SuperAwesomeApp
|--.idea
|--gradle
|--App
|---aars
|----projectx-sdk-1.0.0.aar
|---build
|---jars
|---src
|---build.gradle
Run Code Online (Sandbox Code Playgroud)
他是我的gradle构建文件:
apply plugin: 'android'
buildscript {
repositories {
mavenCentral()
flatDir {
dirs 'aars'
}
}
}
android {
compileSdkVersion 19
buildToolsVersion "19.0.1"
defaultConfig {
minSdkVersion 11
targetSdkVersion 19
versionCode 1
versionName "1.0"
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
}
dependencies {
compile 'com.android.support:gridlayout-v7:19.0.1'
compile 'com.android.support:support-v4:19.0.1'
compile 'com.android.support:appcompat-v7:19.0.1'
compile 'com.projectx.photosdk:sdk:1.0.0@aar'
// compile files( …Run Code Online (Sandbox Code Playgroud) 如何发布android-library项目的Jar包装?
我发现,classes.jar位于下面build/bundles/release/classes.jar,我想这是正确的Jar包(包含*.class文件).
是否有一些官方的方式,将库作为JAR而不是AAR发布?
编辑
我使用Gradle来发布Maven工件,我想发布JAR和AAR包.所以带有签名的JAR,md5,manifest,......
基于https://chris.banes.me/2013/08/27/pushing-aars-to-maven-central/
apply plugin: 'maven'
apply plugin: 'signing'
configurations {
archives {
extendsFrom configurations.default
}
}
def sonatypeRepositoryUrl
if (isReleaseBuild()) {
println 'RELEASE BUILD'
sonatypeRepositoryUrl = "https://oss.sonatype.org/service/local/staging/deploy/maven2/"
} else {
println 'DEBUG BUILD'
sonatypeRepositoryUrl = "https://oss.sonatype.org/content/repositories/snapshots/"
}
if(!hasProperty('nexusPassword')) {
ext.set('nexusPassword', System.console().readPassword("\n\$ Type in password for Sonatype nexus account " + nexusUsername + ": "))
}
if(!signing.hasProperty('password')) {
ext.set('signing.password', System.console().readPassword("\n\$ Type in GPG key password: "))
}
afterEvaluate { project …Run Code Online (Sandbox Code Playgroud) 我们最近升级到 Android Gradle 插件 4.0.0-beta03。我们现在在构建我们的库模块之一时看到此错误
$ ./gradlew library_module:assemble 任务 ':library_module:bundleDebugAar' 执行失败。 > 构建 AAR 时不支持直接本地 .aar 文件依赖项。 生成的 AAR 将被破坏,因为来自任何本地 .aar 的类和 Android 资源 文件依赖项不会打包在生成的 AAR 中。以前的安卓版本 在这种情况下,Gradle 插件也会产生损坏的 AAR(尽管没有抛出此错误)。这 以下 :library_module 项目的直接本地 .aar 文件依赖项导致此错误: ______.aar
我可以看到这是几个月前添加到 AGP 中的。但他们没有提供更多关于原因的信息。
所以。
我正在开发一个项目,但今天构建不再有效。错误如下:
检查AAR元数据时发现2个问题:
依赖项“androidx.core:core:1.12.0-alpha01”需要依赖它的库和应用程序根据 Android API 的代号“UpsideDownCake”进行编译。
:app 目前是针对 android-33 编译的。
建议的操作:使用不同版本的依赖项“androidx.core:core:1.12.0-alpha01”,或者如果您打算尝试该预览版 SDK,则在 build.gradle 文件中将compileSdkPreview 设置为“UpsideDownCake”。
依赖项“androidx.core:core-ktx:1.12.0-alpha01”需要依赖它的库和应用程序根据 Android API 的代号“UpsideDownCake”进行编译。
:app 目前是针对 android-33 编译的。
建议的操作:使用不同版本的依赖项“androidx.core:core-ktx:1.12.0-alpha01”,或者如果您打算尝试该预览版 SDK,则在 build.gradle 文件中将compileSdkPreview 设置为“UpsideDownCake”。
根据我的研究,我了解到根据官方文档,错误消息的版本是昨天发布的。
以下是项目正在使用的 build.gradle 脚本。在我的 build.gradle 中,我有implementation 'androidx.core:core-ktx:1.9.0'. 我不明白为什么在构建阶段添加另一个版本以及为什么androidx.core:core:1.12.0-alpha01添加。
构建.gradle:
buildscript {
apply from: './dependencies.gradle'
repositories {
google()
mavenCentral()
jcenter()
gradlePluginPortal()
}
dependencies {
classpath 'com.android.tools.build:gradle:7.4.0'
classpath 'com.google.gms:google-services:4.3.14'
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.2'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$versions.kotlin_version"
classpath "com.google.dagger:hilt-android-gradle-plugin:$versions.hilt_android"
}
}
allprojects {
repositories {
google()
mavenCentral()
jcenter()
maven { url "https://maven.google.com" …Run Code Online (Sandbox Code Playgroud)