簡體   English   中英

Android應用無法安裝

[英]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.括號中的參數列表-輸入參數的逗號分隔列表,其輸入的數據類型前面帶有括號()。 如果沒有參數,則必須使用空括號。

  1. 例外列表-稍后再討論。
  2. 括號之間的方法主體(此處是方法的代碼,包括局部變量的聲明)在此處。

從上面可以看到,泛型類的規范不是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM