我有一个包含自定义View类的本地aar文件(包括res / values / attrs.xml文件)。
我知道默认情况下本地aar尚未运行,并且我尝试了此处建议的所有变通方法:如何使用新的Gradle Android Build System手动包括外部aar软件包(Ran和Vipul的答案)。
但是,这些解决方案似乎都没有采用自定义View类。我的意思是它不会出现在布局编辑器的“自定义视图”下。
应该行吗?还是需要一些额外的gradle-fu伏都教徒?
所以,这就是问题,我有一个.aar文件,当我将它添加为依赖项时,如下所示:
compile('com.foo:bar:1.0.0@aar')
它生成以下文件:
build > intermediates > exploded-aar > com.foo > bar > bar-1.0.0
其中包含classes.jar,sources等.
但是,它应该做以下事情:
build > intermediates > exploded-aar > com.foo > bar > 1.0.0
有没有人知道为什么我的aar没有被正确导入?
这是一个问题,因为构建gradle时会发生以下错误:
com.android.manifmerger.ManifestMerger2$MergeFailureException: java.io.FileNotFoundException: /build/intermediates/exploded-aar/com.foo/bar/1.0.0/AndroidManifest.xml (No such file or directory)
但是,它在bar-1.0.0目录中清晰可见.
编辑:更多信息
什么都行不通.
我已经创建了一个自定义视图,它扩展了我正在处理的项目的RelativeLayout.我认为它可能对其他人有用,所以我一直在尝试将其设置为库,以便其他人可以找到并使用它.
我还没有找到关于如何在Android Studio中进行设置的明确答案.
要清楚 - 我已经构建了视图并且它工作正常,我只想将其打包为库.
我是否创建了一个新项目并将我的代码放在那里,或者我是否也需要创建一个新模块?一旦我做了其中任何一件事,我需要更改清单和gradle文件的哪些部分?
最后,我是否需要以某种方式从文件中获取AAR,或者最好将其上传到GitHub并让其他人克隆它?
我遇到Android Studio识别本地导入的@aar库中的类的问题.
所以...我已经创建了一个库并导出了一个aar文件.在android工作室里面,我选择了Import Module他们Import .JAR or .AAR Package.
该项目编译并使用aar文件中的类,但Android工作室无法找到类或提供任何自动完成所有.
以下是一些截图:

使用相同方式导入的其他@aar库也会出现同样的问题:

有什么建议?
编辑:
的build.gradle:
...
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile project(':UpPlatformSdk')
compile project(':simpleorm')
... // more libraries here
}
Run Code Online (Sandbox Code Playgroud)
settings.gradle:
include ':app', ':UpPlatformSdk', ':wear', ':simpleorm'
Run Code Online (Sandbox Code Playgroud) 我正试图通过神器gradle puglin将带有javadoc文件的AAR发布到我的maven repo.
aar文件正在上传成功,但我javadoc没有.我可以用哪个脚本上传我的javadocs?
这是我的build.gradle代码
apply plugin: 'com.android.library'
apply plugin: 'com.jfrog.artifactory'
apply plugin: 'maven-publish'
def packageName = 'br.com.lexsis.libtest'
def libraryVersion = '0.0.1-SNAPSHOT'
android {
compileSdkVersion 23
buildToolsVersion "23.0.0"
defaultConfig {
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.0.0'
}
publishing {
publications {
aar(MavenPublication) {
groupId packageName
version = libraryVersion
artifactId project.getName()
// Tell maven to prepare the …Run Code Online (Sandbox Code Playgroud) aar库可能包含proguard配置文件,并且proguard将在运行时使用它们。是否可以忽略这些文件并改用应用程序的配置文件?如果是,怎么办?
我遇到了以下问题:我实现的应用程序包含另一个项目作为依赖项(类型为aar).两个项目共享同一个父pom.依赖项包括应用程序正在使用的资源.要访问库项目中的资源,可以通过调用获取资源ID context.getResources().getIdentifier(resourceKey, resourceType, packageName).我通过调用getPackageName() 给定的context对象获取包名称.在使用之前更改项目的包名称之前
<renameManifestPackage>com.example.newpackagename</renameManifestPackage>
Run Code Online (Sandbox Code Playgroud)
访问图书馆资源工作正常.但是在重命名应用程序的包名后我得到了一个,android.content.res.Resources$NotFoundException因为getIdentifier()调用仍然期望应用程序的旧包名称并且调用getPackageName()返回新的(正如预期的那样).
现在我想知道我是否遗漏了某些东西,或者这是android maven插件中的错误?https://github.com/simpligility/android-maven-plugin
我正在使用Android Studio.我正在写一个名为detector的Android库.它在创建它的项目中完美运行.
compile project(':detector')
Run Code Online (Sandbox Code Playgroud)
我想将它生成的AAR文件导入另一个项目.我这样做:
File > New > New Module > Import .JAR/.AAR Package
Run Code Online (Sandbox Code Playgroud)
然后我在新项目app build.gradle中添加相同的行:
compile project(':detector')
Run Code Online (Sandbox Code Playgroud)
清理和构建后,我运行应用程序并收到此错误:
11-18 06:32:14.151 21283-21283/testing.com.test D/ResourcesManager: For user 0 new overlays fetched Null
11-18 06:32:14.161 21283-21283/testing.com.test W/System: ClassLoader referenced unknown path: /data/app/testing.com.test-1/lib/arm
11-18 06:32:15.131 21283-21283/testing.com.test W/System: ClassLoader referenced unknown path: /data/app/testing.com.test-1/lib/arm
11-18 06:32:15.131 21283-21283/testing.com.test D/ContextRelationManager: ContextRelationManager() : FEATURE_ENABLED=true
11-18 06:32:15.131 21283-21283/testing.com.test D/RelationGraph: garbageCollect()
11-18 06:32:15.301 21283-21283/testing.com.test D/RelationGraph: garbageCollect()
11-18 06:32:15.501 21283-21283/testing.com.test W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have …Run Code Online (Sandbox Code Playgroud) 我有一个新要求,即将JAR文件包含在myspecial.jar我正在构建的Android库中。当我使用gradle构建AAR时,生成的包将我的类和类都包含myspecial.jar在一个名为的文件中classes.jar。我想让他们分开。
根据Android网站https://developer.android.com/studio/projects/android-library.html的说法,可以做到这一点。
此外,AAR文件可能包括以下一个或多个可选条目:
/资产/
/libs/name.jar
/jni/abi_name/name.so
/proguard.txt
/lint.jar
我已经尝试了所有有限的gradle-fu。我不知道。
我遇到了这个问题:https : //github.com/adwiv/android-fat-aar,但它似乎不适用于我。
TL; DR:需要gradle支持,以将第三方jar作为自己的文件捆绑在aar的libs目录中,而不能与我自己的代码一起编译成classes.jar。
gradle android-library build.gradle android-gradle-plugin aar
我正在使用VS2015 Update3与当前/最新的Xamarin,我正在尝试创建一个绑定库来包装用Java编写的第三方SDK.我有一个C#/ .Net背景,到目前为止几乎没有Java经验.此SDK依赖于3个其他项目,可以作为AAR或通过NuGet获得.
我能够为父AAR创建一个绑定库,使用一些MetaData.xml tweato调整参数类型并返回类型并更正类访问器以满足其抽象基类,所有这些都最初阻止了生成的C#.Net Android来自建筑物的绑定库.现在父绑定程序集构建,但无法执行,因为它需要其他3个AAR依赖项.
需要的依赖关系("#"是下面帖子中提到的每个的别名):
在这种情况下,如果我需要创建一个绑定dll来包装依赖于3个其他AAR的父AAR:
我应该(A)创建4个绑定程序集 - 父绑定程序集Bind_AAR_1.dll,它依赖于Bind_AAR_2.dll,Bind_AAR_3.dll和Bind_AAR_4.dll?
或者,我是否应该(2)深入研究2个,3个和4个AAR文件并从每个文件中获取JAR文件,并使用"EmbeddedJar"(或其他属性/设置)将它们直接包含在Jars文件夹中的Bind_AAR_1.dll中?
或者,看到2,3和4实际上是通过NuGet可用的,我应该使用NuGet将它们引用到Bind_AAR_1项目吗?如果我使用NuGet引用/包含它们,那么AAR 1中的Javacode是否能够看到AAR 2,3和4中的代码?
我已经尝试了各种方法(A),(B)和(C)的变化,但没有运气,或导致更多工作的结果,这让我想知道什么是最好/正确的方法.
在相关主题中,最佳做法是使用Metadata.xml文件从生成的生成的包装器API中明确删除您未直接计划在Xamarin项目中使用的所有内容(类等)吗?似乎限制接口可能是好的,并且可能还减少绑定dll的构建大小(以及可能的构建时间).
任何帮助,将不胜感激!
柯蒂斯
================================================== =====================
4/11/2017 - 更新
很高兴得到@_JonDouglas之类的投入!但是......仍然无法使这个SDK工作.
我已经尝试了这些方法A,B和C中的每一个,并且已经能够构建我的绑定项目(通过transforming/MetaData.xml完成操作).第三方SDK被设计/记录为Java解决方案中的组件的一部分.根据供应商的说明文档,此解决方案将3个依赖项添加到其.gradle文件中,从而在整个Java解决方案中提供对这些项的引用.我没有Java历史,所以在这里展开它.
实际上,当我将SDK(单独使用或使用3种方法中的任何一种)与Visual Studio包装到Xamarin Android Binding Assembly中时,在运行时SDK会遇到ClassNotFound异常(由"未找到Google Play"证明)日志).从所需的Java依赖项中使用的类是以后期绑定的方式创建的,使用类名的字符串,如下所示:
使用上述3种方法中的任何一种在Visual Studio中构建绑定程序集似乎并不重要依赖项(使用项目引用,1个绑定中的1个AAR + 3个Nuget OR 1个AAR + 3个JAR或4个绑定中的4个AAR).在运行时,SDK似乎没有看到它们.也许这是有意义的,它不会 - 在SDK本身中没有指向它们的.gradle(如csproj文件)?
try
{
Class.forName("com.google.android.gms.common.GooglePlayServicesUtil");
//more code here
}
catch (ClassNotFoundException e)
{
Log.e("3rd Party SDK", "Google Play not found.");
}
我在想我需要做的是(更接近供应商的指令)创建一个Java解决方案,其中包含一个.gradle文件,该文件包含SDK以及Java项目中的3个依赖项,用于创建AAR文件.然后,我相信我可以为最终包含的AAR创建一个Xamarin绑定程序集.然后我将在我的解决方案中添加对此绑定程序集的引用到我的.Andriod程序集并继续.
理论(尚未证实):[失败.请参阅下面的4/12更新.]将Java SDK +编码的依赖项(在.gradle中显式)包装在模块/库中,然后将其包装在Xamarin Android Binding库中.然后,我需要做的就是从这个包装器模块/库中找出我需要使用的公共方法(并因此公开),添加这些公共方法并将调用转发给SDK.
大图:我正在尝试将其设计和编码为跨平台的Xamarin解决方案,但我正在使用特定于Android和IOS的SDK,这些SDK看起来都是应用程序/ …
aar ×10
android ×8
gradle ×4
java ×2
maven ×2
.net ×1
artifactory ×1
build.gradle ×1
c# ×1
jar ×1
package-name ×1
proguard ×1
xamarin ×1