在AIDE for Android中开发应用时,我遇到了这个错误。该应用程序将成功编译但不会安装,报告此错误:
无法以root身份直接运行应用。考虑在设置中禁用直接运行。
警告:链接器:app_process具有文本重定位。这会浪费内存并且存在安全风险。请修理。
pkg:/storage/sdcard/AppProjects/MyProgram/bin/MyProgram.apk
失败[INSTALL_FAILED_DEXOPT]
退出0
我研究了可能导致这种情况的原因,并且主要遇到了诸如"证书错误等原因,尝试重新签署包裹"和#34;在清单中设置两次权限"和其他东西,没有一个有效。
答案 0 :(得分:1)
您的问题:Java认为您使用相同的签名定义两个方法。
Java方法签名定义:here
方法声明有六个组件,依次为:
1.修改者 - 例如公共,私人和其他您将在稍后了解的内容。
2.返回类型 - 方法返回的值的数据类型,如果方法未返回值,则返回void。
3.方法名称 - 字段名称的规则也适用于方法名称,但约定略有不同。
4.括号中的参数列表 - 以逗号分隔的输入参数列表,以其数据类型开头,括在括号中,()。 如果没有参数,则必须使用空括号。
- 一个例外列表 - 稍后讨论。
- 括在括号之间的方法体 - 方法的代码,包括局部变量的声明,就在这里。
醇>
如上所示,泛型类的规范不是java方法签名的一部分。因此,java会检测两个具有相同签名的add方法。
答案 1 :(得分:0)
我发现问题所在。在某些代码中看起来非常像这样:
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过程有关,我猜......