从我的图书馆隐藏课程(aar)

时间:2017-10-16 08:43:08

标签: java android aar

我试图创建我的小图书馆。但我没有什么问题。我无法理解如何隐藏一些类/方法以免公开使用。 说我有结构:

-myPackage.com
  -classA  (public class example : public classA {...})
  -classB  (just a class example : class classB {...}

以这种方式将我的aar文件添加到android项目中。我只能从库中使用classA。 classB隐藏(对于开发者来说是隐形的)而我无法打电话给他(好吧)。但是classA可以使用classB中的函数。因为它在同一个包装中。好吧。 那么如何在另一个包中正确创建类?

-myPackage.com
 -myHelpPackage
  -classC (public class example: public class classC {...}
  -classD (just a class example: class classD {...}
 -classA (public class example : public classA {...})
 -classB (just a class example : class classB {...}

通过这种方式,我有两个公共类,开发人员可以调用

classA
classC
  

classD仅对classA可见。所以我不能从classA调用classD(函数)。   主要问题:如何实现它?   我想只有一个classA来打电话。 classC没问题。 classD和classB应该对开发人员不可见。但仅适用于classA。有人可以帮我这个吗?

2 个答案:

答案 0 :(得分:0)

如果您未指定任何访问级别修饰符,例如:

package myPackage.com

class classA {
}

默认情况下,该课程将为 package-private 。 这意味着它只对包内的类可见。 另请参阅Oracle here

的文档

答案 1 :(得分:0)

JakobJeremais的注释中已经回答了这个问题,但是如果任何人都不清楚,或者他们跳过了该问题,因为他们只阅读了顶级答案(可以理解)。如果您在aar中有一个package-private类,它仍然可以公开访问,所以我建议您将该类嵌套在任何调用它的地方,这样您将很安全。

例如,我必须扩展EditText,以便可以仅覆盖一个方法,而不能覆盖其他任何方法。然后,我只能从另一个类中引用它,但不希望从我添加了库的任何项目中都可以访问它。所以我嵌套了它,现在很好。

public class VisibleClass extends View {
    public static HiddenClass extends EditTextCompat { 
        @Override
        public void annoyingFunction() {
            //Disable this function
        }
    }
}

不过,我应该注意:编译器对于从布局访问它并不满意,因此我认为它并没有真正的帮助,因此我暂时不建议这样做。不过,如果您有时间修修补补,请继续。