【问题标题】:Class in AAR file not available in Android StudioAAR 文件中的类在 Android Studio 中不可用
【发布时间】:2018-10-12 01:27:25
【问题描述】:

我创建了一个库项目,我将其构建为 AAR 文件,然后包含在另一个项目中。它在 libs 文件夹中,主要的 gradle.build 文件包括它:implementation fileTree(include: ['*.jar','*.aar'], dir: 'libs')

当我尝试使用这个 aar 文件的类时,除了一个类之外,所有这些类都可用。我最初认为它可能是 Proguard,但我什至删除了 Proguard,它仍然不可用。它是一个公共类,当我反编译 AAR 文件时它甚至在那里。

这是内容:

package com.onboarding;

import android.content.Context;
import android.content.Intent;
import android.support.annotation.Keep;


/**
 *
 */
@Keep
public class Builder {


    /**
     *
     */
    public static String mainColor = null;
    public static String baseUrl = null;
    public static Class firstActivity = null;
    public static Class onboardingSettingsActivity = null;


    /**
     *
     */
    public static String tosUrl = null;
    public static String privacyUrl = null;
    public static String cookieUrl = null;
    public static String contactsLearnMoreUrl = null;


    /**
     *
     */
    private static Builder builder = null;


    /**
     *
     */
    private Builder() {}


    /**
     *
     */
    public static Builder init() {
        if (builder == null) {
            builder = new Builder();
        }
        return builder;
    }


    /**
     *
     */
    public void start(final Context context) {
        final Intent intent = new Intent(context, Onboarding1.class);
        context.startActivity(intent);
    }


    /**
     *
     */
    public Builder setMainColor(final String color) {
        mainColor = color;
        return this;
    }


    /**
     *
     */
    public Builder setBaseUrl(final String url) {
        baseUrl = url;
        return this;
    }


    /**
     *
     */
    public Builder setFirstActivity(final Class c) {
        firstActivity = c;
        return this;
    }


    /**
     *
     */
    public Builder setOnboardingSettingsActivity(final Class c) {
        onboardingSettingsActivity = c;
        return this;
    }


    /**
     *
     */
    public Builder setTosUrl(final String u) {
        tosUrl = u;
        return this;
    }


    /**
     *
     */
    public Builder setPrivacyUrl(final String u) {
        privacyUrl = u;
        return this;
    }


    /**
     *
     */
    public Builder setCookieUrl(final String u) {
        cookieUrl = u;
        return this;
    }


    /**
     *
     */
    public Builder setContactsLearnMoreUrl(final String u) {
        contactsLearnMoreUrl = u;
        return this;
    }

}

知道为什么我不能从主项目访问这个类吗?

谢谢!

【问题讨论】:

  • 当您反编译 APK(不仅仅是 AAR)时,该类是否存在,或者只是在 Android Studio 中查看它?同一个包中的其他类是否使用这个类?通过无法访问该类,您是否意味着当您尝试使用它时另一个项目无法编译/自动完成不起作用/通过双击 shift 键搜索该类不起作用?
  • 是的,如果我反编译 aar(将 aar 重命名为 zip,解压缩,打开 class.jar 文件),这个特定的类就在那里。自动完成适用于 aar 中的其他类,但不适用于 Builder 类。

标签: android proguard android-proguard aar


【解决方案1】:

在随机工作然后不工作之后,Android Studio 中的 File -> Invalidate caches / restart 似乎起到了作用。

显然,Android Studio 缓存了 aar 的某些部分,即使是 CleanRebuild 也可以修复。

【讨论】:

  • 我无法解决这个问题。我导入了一个 aar 文件作为依赖项,并想从类中调用一个函数。但找不到课程。你能帮忙吗
【解决方案2】:

您好,您检查过您的依赖项吗?如果它被添加在那里?我的意思是这个 也可以参考这个documentation 来了解实现和api 之间的区别。

【讨论】:

  • 是的,我已将它添加到我的依赖项中。我可以访问同一个包中的其他类.. 只是不能访问 Builder 类。
猜你喜欢
  • 2014-08-10
  • 1970-01-01
  • 2017-10-15
  • 2015-03-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多