[英]Android app cannot install
在AIDE中為Android開發應用程序時,遇到了此錯誤。 該應用程序將成功編譯但無法安裝,並報告以下錯誤:
無法直接以root用戶身份運行該應用程序。 考慮在設置中禁用直接運行。
警告:鏈接器:app_process具有文本重定位。 這浪費了內存,並且存在安全風險。 請解決。
pkg:/storage/sdcard/AppProjects/MyProgram/bin/MyProgram.apk
失敗[INSTALL_FAILED_DEXOPT]
以0退出
我研究了可能導致這種情況的原因,並且主要遇到了諸如“證書錯誤,嘗試重新簽發程序包”和“在清單中兩次設置權限”之類的原因,但沒有任何一個起作用。
您的問題:Java認為您定義了兩個具有相同簽名的方法。
Java方法簽名定義: https : //docs.oracle.com/javase/tutorial/java/javaOO/methods.html
方法聲明按順序包含六個部分:
1.修飾符-諸如公共,私有和其他您將在以后學習的修飾符。
2.返回類型-方法返回的值的數據類型;如果該方法未返回值,則返回void。
3.方法名稱-字段名稱的規則也適用於方法名稱,但是約定有所不同。
4.括號中的參數列表-輸入參數的逗號分隔列表,其輸入的數據類型前面帶有括號()。 如果沒有參數,則必須使用空括號。
- 例外列表-稍后再討論。
- 括號之間的方法主體(此處是方法的代碼,包括局部變量的聲明)在此處。
從上面可以看到,泛型類的規范不是java方法簽名的一部分。 因此,java檢測到兩個具有相同簽名的添加方法。
我找到了問題所在。 它在某些代碼中看起來非常像這樣:
public class Builder<T extends Base> {
private final List<Def1> subDefs1 = new ArrayList<>();
private final List<Def2> subDefs2 = new ArrayList<>();
public Builder<T> add(final Collection<Def1> ds) {
subDefs1.addAll(ds);
return this;
}
public Builder<T> add(final Collection<Def2> ds) {
subDefs2.addAll(ds);
return this;
}
}
interface Base {}
final class Def1 implements Base {}
final class Def2 implements Base {}
我有這些add
方法,它們都采用某種Collection
。 我想這個問題一定與Java乏善可陳的泛型和dexing過程有關。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.