标签: aar

将本机库(SO 文件)包装到 Android 存档(aar 文件)中

我想做一些概念上简单但找不到任何文档的事情。我有一个特定的库,我为我感兴趣的所有平台编译了 SO 文件。

现在我只想生成一个包含这些 so 文件的 AAR 文件。

我知道 AAR 文件必须具有如下结构:/jni//mylib.so

我现在知道的是我应该生成什么样的清单/其他元数据。

理想情况下,使用 Gradle 生成它会很棒,但我只需要完成这件事,因此编写一个生成 zip 的简单脚本然后重命名它也很有意义。

java-native-interface android native aar

5
推荐指数
1
解决办法
4036
查看次数

xamarin 是否可以从 Xamarin 创建 Android .AAR 文件

我需要从我的 Xamarin 项目生成 Android 存档 (.AAR) 文件。将通过 Xamarin 生成的应用程序嵌入到在 Android Studio 中开发的另一个 android 应用程序中需要 AAR 文件。那么是否有任何选项可以让我从我的 xamarin 项目生成 AAR 文件,或者是否有任何其他解决办法,以便我可以将我的 xamarin 应用程序嵌入到 android 应用程序中?

xamarin.android aar

5
推荐指数
0
解决办法
251
查看次数

aar 与“普通模块”的优势

如果我有一个链接了许多库项目的项目,是否可以通过将每个项目打包在 AAR 中并将其包含在主项目中来提高构建性能?或者这不会有任何区别,因为当编译器需要组装 apk 时,它无论如何都需要将所有内容打包在一起?

感谢任何人谁会给我一些关于两种方法之间的性能差异的澄清

android library-project android-gradle-plugin aar

5
推荐指数
1
解决办法
805
查看次数

无法使用阴影插件为 gradle 重新定位依赖项

我有一个项目,它使用一个包含在 aar 文件中的库。问题是我的应用程序使用 daager 1 进行依赖注入,它使用 Dagger 1,因为我使用的框架仅与 dagger 1 兼容。问题是我需要使用的库使用 Dagger 2 进行依赖注入,所以当我添加时库和我在我的应用程序 gradle 文件中添加依赖项它不起作用(正如预期的那样,因为 Dagger 1 和 Dagger 2 不能开箱即用地同时使用),所以我试图使用重新定位 Dagger 2 依赖项影子插件。

我按照本教程进行操作http://ferndocejas.com/2016/08/03/android-dagger-1-and-2-living-together/

jar 文件在模块内生成但为空,它们不包含 Dagger 2 的重命名文件。我从 github https://github.com/android10/two-daggers下载了该项目,它可以工作,但我可以管理让它在我的项目中工作。

我创建的模块中的 gradle 文件与教程中的文件完全相同。你能看出我做错了什么吗?

shadow.gradle 也是一个精确的副本。

唯一的区别是我的应用程序中的 build.gradle 是

apply plugin: 'com.android.application'
apply plugin: 'com.neenbedankt.android-apt'
apply plugin: 'com.jakewharton.hugo'


android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"

defaultConfig {
    applicationId "com.xxx.xxx"
    minSdkVersion 16
    targetSdkVersion 23
    versionCode Integer.parseInt("$APP_VERSION_CODE")
    versionName "$APP_VERSION_NAME"

    testInstrumentationRunner "com.android.test.runner.MultiDexTestRunner"

    // Enabling multidex support.
    multiDexEnabled true

}

testBuildType …
Run Code Online (Sandbox Code Playgroud)

android jar gradle android-studio aar

5
推荐指数
0
解决办法
1007
查看次数

访问依赖于其他库的 Android 库的公共资源会产生警告,指出这些资源被标记为私有

我为 Android 创建了一个库,它本身依赖于appcompatdesign支持库。我通过在我的图书馆中放置一个虚拟资源将我图书馆的所有资源标记为私有Public.xml

<public name="string_res_that_does_not_exist" type="string"/>
Run Code Online (Sandbox Code Playgroud)

当我将我的库导入另一个项目时,Android Studio 会在使用appcompatdesign库中的公共资源的行中生成警告,例如:

  • ?colorPrimary
  • ?colorPrimaryDark
  • ?colorAccent
  • ?selectableItemBackground

警告说The resource @attr/<resource-name> is marked as private in <my-library-name>

这个问题似乎与我的问题有关:https : //code.google.com/p/android/issues/detail?id=183120

这里的根本原因是,当一个库依赖另一个库时,它会将其依赖的任何库中的所有资源导入到自己声明的 R.txt(在 AAR 文件中)中。但是,它不包括来自这些依赖项的 public.txt 声明,因此现在它最终将这些符号公开为已声明但不是公共的——例如私有的。

如何防止显示这些警告,以便我图书馆的其他用户不会遇到这些问题?

android android-studio aar

5
推荐指数
1
解决办法
1147
查看次数

使用 maven 发布具有外部依赖项的 Android 库 AAR 的干净方法

我正在构建一个尝试发布到 Nexus Maven 存储库的 Android 库。让我感到困惑的是,似乎没有使用maven-publish插件通过 gradle 发布我的项目的干净方法。

我找到了许多答案,但并不真正让我满意:

这个插件只能正常工作,目前没有维护。

在我的 build.gradle 中修改生成的 POM工作,我只是觉得这不是应该完成的方式 - 在每个 android 库的build.gradle.

谷歌甚至maven-publish在他们的文档中提到了这个插件,但他们并没有真正展示如何使用它。

请告诉我我遗漏了什么:问题没有我想象的那么简单吗?我只是想发布一个带有 pom 的 AAR,说明它是依赖项,我正在尝试构建最标准和默认的解决方案。

提前致谢。

android nexus gradle maven aar

5
推荐指数
0
解决办法
651
查看次数

如何从 Android 库 (AAR) 加载资产(文本文件)?

我在 src/main/assets 文件夹中创建了一个带有一些文本文件的 Android 库 (AAR)。文本文件仅在库中使用,而不在使用该库的应用程序中使用,后者位于同一个 Android Studio 项目中。访问这些文本文件应该很简单,但我做不到。

每个文本文件包含许多行,这些行将被解析为一个列表,该列表仅供库使用。使用一个Context对象,应该很容易;但是我尝试在静态上下文中加载文件,但我无权访问任何Context对象。这是我尝试过的一些代码:

static {

    InputStream is = null;
    try {

        is = Resources.getSystem().getAssets().open("assets/stopwords.txt");

        Request.stopwords = new ArrayList<>();
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        String stopword;

        while ((stopword = reader.readLine()) != null) {
            Request.stopwords.add(stopword);
        }
    }
    catch (IOException e) {

        logger.error("Could not open input stream");
        logger.error("Exception: {}", e.getMessage());
    }
    catch (Exception e) {

        logger.error("Input stream opened but something else happened");
        logger.error("Exception: {}", e.getMessage());
    }
    finally {

        try {
            is.close(); …
Run Code Online (Sandbox Code Playgroud)

java android assets gradle aar

5
推荐指数
0
解决办法
932
查看次数

绑定 AAR 不包括资源文件夹?

我在通过绑定 AAR 库构建 xamarin 项目时遇到问题。绑定项目有一个 AAR 库,其中包含一些资源(构建操作:)LibraryProjectZip。xamarin 中的 Android 应用程序项目具有该绑定项目的引用。一切都完美构建,直到某个时刻......当我运行应用程序时,当应用程序需要执行该绑定项目的一些代码(在这种情况下,来自 AAR 库的代码)时,它会使应用程序崩溃!出现此错误的原因是该代码段未找到该 AAR 库中可用的布局...

java.lang.NoClassDefFoundError: Failed resolution of: Lcom/myapplication/android/R$layout;
at com.myapplication.android.view.MyView.<init>(NativeInAppView.java:27)
Run Code Online (Sandbox Code Playgroud)

我在这里检查了文档。

 LibraryProjectZip – Embeds an .AAR file into the resulting Bindings Library .DLL. This is similar to EmbeddedJar, except that you can access resources (as well as code) in the bound .AAR file. Use this option when you want to embed an .AAR into your Bindings Library.
Run Code Online (Sandbox Code Playgroud)

所以......这意味着应该包含资源......我的项目有什么问题?

android xamarin.android xamarin aar

5
推荐指数
0
解决办法
469
查看次数

如何修复 Android .aar 项目中的“java.lang.NoClassDefFoundError”

.aar构建了一个 android库,我正在尝试将它与其中一个项目集成。当应用程序尝试打开.aar我使用改造进行 API 调用的库的初始屏幕时。我收到以下异常

java.lang.NoClassDefFoundError:解析失败:Lokhttp3/OkHttpClient$Builder;

我没有在我的.aar项目中混淆或启用 pro-guard 。

以下是我的.aarGradle 依赖项

implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support:design:28.0.0'
implementation 'com.squareup.retrofit2:retrofit:2.5.0'
implementation 'com.squareup.okhttp3:okhttp:3.12.0'
implementation 'com.google.code.gson:gson:2.8.5'
implementation 'com.squareup.retrofit2:converter-gson:2.2.0'

testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
Run Code Online (Sandbox Code Playgroud)

android aar retrofit2 okhttp3

5
推荐指数
2
解决办法
2645
查看次数

我们能否构建一个依赖 v3 的 AAR,而不会有与 v2 的客户端应用程序依赖发生冲突的风险?

我们想制作一个 Android 档案库 (AAR) 并分发给我们的客户。在这个 Android 库中,我们使用了一些第三方依赖项,我们希望保护它们免受任何版本冲突的影响。我们也不希望将依赖项自动更新到最新版本。

例如这个场景:我们正在使用(并且需要)版本 3 的依赖项和相同依赖项的客户端版本 2 - 由于某种原因,这些版本不兼容,我们的客户端无法更新到版本 3。或者这个:客户端还使用来自另一个提供程序的 AAR,该 AAR 反过来使用版本 2 的依赖项 - 将其更新到版本 3 会破坏其他 AAR。要求软件链的每个部分都与相同的依赖版本兼容并不总是可能的。

使用普通 JAR 时,通过使用ShadowJar在构建步骤中包含和重新定位依赖项,可以轻松避免这种情况。但是对于 AAR,我发现的最佳方法是根据以下内容创建自定义 gradle ShadowJar 任务:https : //github.com/johnrengelman/shadow/issues/183 并在编译实际 AAR 之前执行重新定位步骤。但这使得你的应用源文件需要直接导入重定位的依赖项,即:import relocated.org.com.dependency。

然而,这不是我们认为的 AAR:s 常见问题场景的最佳解决方案,如上所述。我们希望在开发阶段之后,在构建 AAR 时进行迁移步骤。我还没有找到一种令人满意的方法来做到这一点。真的没有更好的解决方案吗?

dependencies android gradle aar shadowjar

5
推荐指数
1
解决办法
275
查看次数