Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 与Android项目中的源库相比,实现AAR库会产生意外的结果 总结 当前行为_Java_Android_Android Studio_Aar - Fatal编程技术网

Java 与Android项目中的源库相比,实现AAR库会产生意外的结果 总结 当前行为

Java 与Android项目中的源库相比,实现AAR库会产生意外的结果 总结 当前行为,java,android,android-studio,aar,Java,Android,Android Studio,Aar,与Android项目中的源库相比,实现AAR库会产生意外的结果 super关键字似乎指向祖父母类,而不是直接父类 以某种方式重写祖父母方法,即使在父级中声明并重写了相同的方法 这两个问题仅在使用已编译的库AAR时存在,即在使用库源代码实现同一项目时不存在问题 预期行为 我希望对super的两个调用都能解析为父类 我希望重写onCreate可以重写父类中的方法,而不是祖父母类中的方法 工作应用程序 我在packagecom.example.sourceapp 这将使用并管理位于com.ex

与Android项目中的源库相比,实现AAR库会产生意外的结果

  • super
    关键字似乎指向祖父母类,而不是直接父类
  • 以某种方式重写祖父母方法,即使在父级中声明并重写了相同的方法
这两个问题仅在使用已编译的库AAR时存在,即在使用库源代码实现同一项目时不存在问题

预期行为
  • 我希望对
    super
    的两个调用都能解析为父类
  • 我希望重写
    onCreate
    可以重写父类中的方法,而不是祖父母类中的方法
工作应用程序 我在package
com.example.sourceapp

这将使用并管理位于
com.example.sourcelibrary
中的一个单独库的源代码,在这个库中,我们称之为
ParentClass

在父类中,我有两个感兴趣的成员

  • 名为
    myBool
    的公共布尔值,源于
    ParentClass
  • 重写android.app.Activity.onCreate方法的一种方法,该方法也被重写,并从某些其他库
    com.example.someotherlibrary
    中的某个祖辈类继承而来
在我的
com.example.sourceapp.MainActivity
中,我做了两件事

  • 我扩展
    com.example.sourcelibrary.ParentClass
    并使用
    super.myBool=true修改
    ParentClass
    中包含的
    myBool
  • 我在重写的方法中通过
    super.onCreate()
    调用
    onCreate
    。 两种方法都能如期工作。当我将鼠标悬停在
    super.onCreate
    androidstudio上时,它会按照预期正确解析父类
不工作的应用程序 在另一个Android项目
com.example.compiledapp.MainActivity
中,我不依赖于源库
com.example.sourcelibrary
,而是依赖于由同一库生成的编译(调试)AAR文件

我使用
import com.example.sourcelibrary.ParentClass
com.example.compiledapp.MainActivity
顶部的AAR包中导入所需的类,但没有任何解决问题

稍后在
com.example.compiledapp.MainActivity
中,我使用与前面相同的代码

super.myBool = true;
super.onCreate()
但Android Studio表示它无法在
super.myBool=true中解析myBool

此外,第二行似乎很好地解决了问题,但当我将鼠标悬停在它上面时,仔细检查一下,Android Studio指出,
onCreate
解析为祖父母类
com.example.someotherlibrary.祖父母类
的成员,而不是父类
com.example.sourcelibrary.ParentClass

当我将鼠标悬停在
onCreate
override上时,AndroidStudio显示我正在从祖辈类而不是父类重写
onCreate

onCreate
为什么/如何跳过父方法并重写祖父母类

另外,它看起来像是
super
关键字解析为祖辈类,而不是父类。这是我能想到的唯一一种解释,它会导致
onCreate
解析为祖父母类,而
myBool
无法解析。我不认为这就是
super
的工作原理

这是正常的吗?我只是误解了关于继承的一些基本问题?也许我在编译到AAR时做错了什么,使得父变量/方法在声明为公共的情况下变得不可访问?或者Android Studio根据一些我不知道的规则,优先选择一个软件包而不是另一个

工作代码
package com.example.sourceapp;
导入android.os.Bundle;
导入com.example.sourcelibrary.ParentClass;
公共类main活动扩展父类{
//显示如何在父类中重写onCreate
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);//super解析为父类
super.myBool=true;//super解析为ParentClass
}
}
非工作代码
package com.example.compiledapp;
导入android.os.Bundle;
导入com.example.sourcelibrary.ParentClass;
公共类main活动扩展父类{
//显示在祖父母类中重写onCreate的步骤
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);//super解析为祖父母
super.myBool=true;//未解析
}
}

我最终找到了错误。事实证明,在构建我的
com.example.sourceapp
(其中包括库模块
com.example.sourcelibrary
)时,构建过程没有更新AAR文件,并且过时的sourcelibrary代码中显然存在错误/旧的内容(可能它缺少onCreate方法和myBool。我真的不确定,因为我不记得它会出现在我的git历史记录中的什么地方,因为我只是简单地指出修改的日期很旧,然后重新构建,旧的时间戳现在不见了

不管怎样,Android Studio中的gradle菜单对
com.example.sourceapp
有帮助,并导航到sourcelibrary-->任务-->构建-->构建。尝试构建库时直接抛出了一个与SDK版本相关的错误,因此我修复了这个问题,并重新构建,重新导入到compiledapp中,它按预期工作

其他人可能会从中了解到,如果你的AAR发生了奇怪的事情