在为Android开发AIDE应用程序时,我遇到了这个错误。该应用程序将成功编译,但不会安装,并报告了以下错误:
无法以根用户的身份直接运行应用程序。考虑禁用在设置中运行的定向。 警告:链接器: app_process有文本重定位。这是在浪费内存,也是一种安全风险。请修理一下。 pkg: /storage/sdcard/AppProjects/MyProgram/bin/MyProgram.apk 故障INSTALL_FAILED_DEXOPT 带0退出
我研究了导致这种情况的原因,主要是因为“证书错误、尝试放弃包”和“在清单中设置两次权限”等,这些都没有起作用。
发布于 2015-06-28 22:15:35
我找到了问题所在。在一些代码中,它看起来非常像这样:
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过程有关,我猜.
发布于 2015-06-28 22:21:44
您的问题: Java认为您定义了两个具有相同签名的方法。
Java方法签名定义:https://docs.oracle.com/javase/tutorial/java/javaOO/methods.html
方法声明有六个组件,以便: 1.修饰符--例如公共、私有和其他你稍后会学到的。 2.返回类型--方法返回的值的数据类型,如果方法不返回值,则为not。 3.方法名称--字段名的规则也适用于方法名称,但惯例略有不同。 4.括号中的参数列表--以逗号分隔的输入参数列表,在输入参数之前加上数据类型,用括号括起来,()。如果没有参数,则必须使用空括号。
正如您在上面看到的,泛型类的规范不是java方法签名的一部分。因此,java检测两个具有相同签名的add-方法。
https://stackoverflow.com/questions/31105311
复制相似问题