我正在开发一个 flutter 项目,并用它构建 aar。我可以按照 flutter 提供的说明将这个 aar 集成到我的本机 android 项目中。但我的问题是这个aar是本地集成的。我想通过 maven 发布这个 aar,以便团队成员可以轻松访问它。
publishing在年级任务的帮助下可以从本机库发布。但对于 flutter 库,我不确定我们应该做什么。所以,我需要这方面的帮助。
我正在使用 flutter 插件,想要.aar在插件的 android 部分导入一个项目。我尝试打开 android 项目并.aar通过导入模块来导入项目,包括它setting.gradle并添加它的依赖项build.grade(就像任何其他本机 android 项目一样)。但是,当我运行flutter项目时,.aar找不到该项目。
我得到的错误是
评估项目“:flutter_plugin_andriod”时出现问题
在项目“:flutter_plugin_andriod”中找不到路径为“:commonlib”的项目。
有人解决了吗?
我有一个库,在maven中心有一些小部件.当我将该库作为依赖项(从maven中心)添加到使用gradle的项目时,我得到:
java.lang.NoClassDefFoundError: com.my.pacakge.R$styleable
Run Code Online (Sandbox Code Playgroud)
如果我手动下载.aar并将其包含在项目中,一切正常.我尝试使用Android Studio的代码完成来查看是否R包含了库.当我使用maven依赖时,键入不com.my.pacakge.R返回任何结果,但是当我使用本地.aar时,它返回R库的库.
这是库代码:
// widget constructor
public ForegroundImageView(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ForegroundImageView);
Drawable foreground = a.getDrawable(R.styleable.ForegroundImageView_android_foreground);
if (foreground != null) {
setForeground(foreground);
}
a.recycle();
}
// attrs.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="ForegroundImageView">
<attr name="android:foreground"/>
</declare-styleable>
</resources>
Run Code Online (Sandbox Code Playgroud) 我已经研究了很多小时关于可能的解决方案,但无论我尝试它只是失败.这是解释的情况:
我在Android Studio上有这个库项目,它生成app-debug.aar文件.然后我在实现项目中添加这个新模块,按照向导导入.JAR/.AARs我选择.aar并更新:app项目结构中的依赖项.
一旦清理了项目(甚至使用./gradlew clean--Mac OS X),我可以在任何活动中引用该类及其方法.
现在,在运行时,一旦在真实设备上构建和安装,应用程序将崩溃抛出上述运行时异常.
注意:我正在导入,.aar因为我需要保护代码,它有资源,所以一个.jar是不可能的.如果我导入库模块(使用源代码而不是所有代码.aar),则应用程序在运行时没有问题.
我已经尝试了所有的东西,如果有人能够对这可能会有所了解,那么我将非常感激.
该类扩展ViewGroup并在运行时实例化,以防任何事情.代码是给我的,所以除非绝对必要,否则可能无法进行重大改变.
先谢谢大家!
阿曼多
我曾经使用过一个使用Retrofit和Joda DateTime的Android库(一个API客户端).
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.2.0'
compile 'com.squareup.retrofit:retrofit:1.9.0'
compile 'joda-time:joda-time:2.8.1'
}
Run Code Online (Sandbox Code Playgroud)
现在库已经完成,我将它编译成AAR文件,我想在应用程序中使用它,所以我将它添加到应用程序的libs文件夹中,并将其包含在build.gradle文件中,如下所示:
dependencies {
compile(name:'s3papiandroidclient', ext:'aar')
//Some other things
}
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试从库初始化API客户端时,应用程序在从RetroFit或DateTime调用对象时崩溃(例如,retrofit.RestAdapter).看起来Gradle没有从AAR库中读取依赖项,因此不会在我的应用程序中安装Retrofit和DateTime.我试图transitive=true在我的AAR文件上使用该参数,但没有帮助.
其他可能有帮助的点,我试图生成一个POM文件,并且依赖项也没有出现在其中.看起来这些事情真的发生了,我完全坚持了.
我能找到的唯一解决方法是手动将AAR文件中的依赖项添加到应用程序的build.gradle文件中,但它没有意义,我假设Gradle可以自己导入依赖项!
问候,
Gyoo.
我有一个“基础”库,提供了纯Java代码,现在我想在此基础上创建一个Android库。假设两个库都有一个Log类。当我构建aar并将其嵌套在项目中时,我可以选择要导入的Log类(为了防止这种情况,我只应显示Android库中的Log类)。建立Aar时是否有机会排除库?这是gradle(我尝试了很多,但没有任何帮助)。
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.3.1'
}
}
apply plugin: 'com.android.library'
repositories {
jcenter()
}
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
minSdkVersion 9
targetSdkVersion 23
versionCode 9
versionName "0.0.9"
project.archivesBaseName = "andcommon"
project.version = android.defaultConfig.versionName
}
packagingOptions {
// exclude 'res'
}
// configurations {
// compile.exclude group: 'com.pepperonas.jbasx'
// }
// sourceSets {
// main {
// java {
// exclude '**/Log.java'
// }
// }
// }
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7 …Run Code Online (Sandbox Code Playgroud) 我有一个Android应用程序的Android aar库.它与直接包含在Android项目中的aar库一起正常工作.我想将此库移动到我的内部Nexus maven存储库,以便其他开发人员也可以使用该库.
如何将aar上传到Nexus(Maven存储库)?在Web界面中没有明显的选项:
我.aar在Android Studio中添加了文件.它造成了一些冲突.现在我想删除此.aar文件,但我无法找到删除此文件的任何选项.
我也搜索了这个,但无法找到删除.aar文件的任何解决方案
我想使用proguard 混淆.aar库,以进行分发,我尝试了许多Internet解决方案,但到目前为止没有任何效果,仅混淆了一些代码。有人可以帮我解决问题吗?
我(最终)能够使用本指南将我的Android库发布到AWS S3 maven存储库.它作为AAR而不是JAR文件发布,这意味着即使生成的POM文件列出了其所有内部依赖项,在将库添加到另一个项目时也会忽略它们.似乎是一个非常常见的问题.我从知道这个,我只需要列出一个清单的Maven的依赖关系,但如何做到这一点?
我真的是新手,所以越简单越好......谢谢!
注意:我也发现了这个问题,所以我在依赖实现行的末尾添加了"{transitive = true}"并且它有效.
所以现在要成功包含我的库,依赖项必须编码为:
implementation (group: 'com.mygroup', name: 'my_library', version: '1.3', ext: 'aar', classifier: 'release') { transitive=true changing=true }
Run Code Online (Sandbox Code Playgroud)
(我包括"changing = true"以强制它每次重新下载库.)
如果我不包含"transitive = true",我会收到以下错误:
02-04 20:11:48.462 10225-10225/com.mydomain.app.testapplication4 E/dalvikvm: Could not find class 'android.graphics.drawable.RippleDrawable', referenced from method android.support.v7.widget.AppCompatImageHelper.hasOverlappingRendering
02-04 20:14:07.080 10225-10225/com.mydomain.app.testapplication4 E/dalvikvm: Could not find class 'android.app.NotificationChannel', referenced from method com.mydomain.library.mydomain$1.onReceive
02-04 20:14:07.290 10225-10225/com.mydomain.app.testapplication4 E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.NoClassDefFoundError: com.google.firebase.iid.FirebaseInstanceId
at com.mydomain.library.MyActivity.onCreate(MyActivity.java:88)
at android.app.Activity.performCreate(Activity.java:4701)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1051)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1924) …Run Code Online (Sandbox Code Playgroud) aar ×10
android ×9
gradle ×4
maven ×3
flutter ×2
java ×2
dependencies ×1
nexus ×1
obfuscation ×1