亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

與 Android 項目中的源庫相比,實現 AAR 庫的意外結果

與 Android 項目中的源庫相比,實現 AAR 庫的意外結果

海綿寶寶撒 2022-05-20 18:33:43
概括當前行為與 Android 項目中的源庫相比,實現 AAR 庫的意外結果。super關鍵字似乎指向祖父類而不是直接父類。即使在父級中聲明并覆蓋了相同的方法,也以某種方式覆蓋了祖父級方法。這兩個問題僅在使用庫的編譯 AAR 時存在,即使用庫源代碼實現相同項目時不存在問題。預期行為我希望這兩個調用都能super解析為父類。我希望覆蓋onCreate覆蓋父類而不是祖父類中的方法。工作應用程序我有一個基于包的 Android 應用程序com.example.sourceapp這使用和管理位于 中的單獨庫的源代碼,com.example.sourcelibrary我們將在其中調用一個類ParentClass。在ParentClass我有兩個感興趣的成員。一個名為的公共布爾值myBool,起源于ParentClass覆蓋該android.app.Activity.onCreate方法的方法,該方法也被GrandparentClass其他庫中的某個祖父類覆蓋和繼承com.example.someotherlibrary。在我的com.example.sourceapp.MainActivity我做兩件事。我擴展com.example.sourcelibrary.ParentClass和修改myBool包含在ParentClassusing 中super.myBool = true;。我在被覆蓋的方法中調用onCreatevia 。super.onCreate()兩者都按預期工作。當我將鼠標懸停在super.onCreateAndroid Studio 上時,表明它可以按預期正確解析為父類。不工作的應用程序在不同的 Android 項目中,我依賴于由同一個庫生成的已編譯(調試)AAR 文件,com.example.compiledapp.MainActivity而不是依賴于源庫。com.example.sourcelibrary我從頂部的 AAR 包中導入所需的類,com.example.compiledapp.MainActivity沒有import com.example.sourcelibrary.ParentClass任何解決問題。稍后com.example.compiledapp.MainActivity我使用與以前相同的代碼super.myBool = true; super.onCreate()但 Android Studio 表示它無法解析 myBool 中的super.myBool = true;.此外,第二行似乎解決得很好,但是當我將鼠標懸停在它上面時仔細檢查,Android Studio 表明它onCreate解析為祖父類的成員com.example.someotherlibrary.GrandparentClass而不是父類com.example.sourcelibrary.ParentClass。查看幾行,當我將鼠標懸停在onCreate覆蓋上時,Android Studio 表明我正在覆蓋onCreate祖父類,而不是父類。為什么/如何onCreate跳過父方法并覆蓋祖父類?此外,看起來super關鍵字正在解析為祖父類而不是父類。這是我能想到的唯一解釋,它會導致onCreate解析為 GrandparentClass 而myBool無法解析。我不認為這是如何super工作的。這是正常的嗎?我只是誤解了繼承的基本原理嗎?也許我在編譯到 AAR 時做錯了,以至于盡管被聲明為公共的父變量/方法變得不可訪問?或者,Android Studio 可能會根據我不知道的一些規則優先選擇一個包而不是另一個包?
查看完整描述

1 回答

?
人到中年有點甜

TA貢獻1895條經驗 獲得超7個贊

我最終找到了錯誤。事實證明,在構建com.example.sourceapp包含庫模塊com.example.sourcelibrary的 my 時,構建過程沒有更新 AAR 文件,并且在過時的源庫代碼中顯然存在錯誤/舊問題(可能缺少 onCreate 方法和 myBool。不確定因為我不記得在我的 git 歷史中它會在哪里,因為我只是簡要地指出修改日期是舊的,然后重建并且舊的時間戳現在已經消失了。

不管怎樣,進入 Android Studio 的 gradle 菜單com.example.sourceapp并導航到 sourcelibrary-->Tasks-->build-->build 有幫助。嘗試直接構建庫會引發與 SDK 版本相關的錯誤,因此我修復了此問題并重新構建,重新導入到已編譯的應用程序中,它按預期工作。

其他人可能從中學到的一點是,如果您的 AAR 依賴項發生了一些奇怪的事情,請檢查您構建 AAR 的源代碼是否實際上正在構建和更新 AAR 文件,因為 Android Studio 顯然不會引發錯誤在構建圍繞圖書館的應用程序時。

也許應用程序級別 gradle 中的 SDK 設置覆蓋了庫級別 gradle 設置并允許它無錯誤地構建應用程序,并且更新的庫實際上是構建的,但僅在 APK 內?不確定,確切的原因,但至少吸取了一個整體的教訓。


查看完整回答
反對 回復 2022-05-20
  • 1 回答
  • 0 關注
  • 125 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號