Android系统。如何以编程方式更改自己的代码?

时间:2017-06-03 13:11:06

标签: android

我有一个简单的按钮

<Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/button"
        android:onClick="trap" />

初始代码

package com.example.a21.ii;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void trap(View view){
        //click function
    }
}

点击后必须更改为此代码

  package com.example.a21.ii;

    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;

    public class MainActivity extends AppCompatActivity {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }

        public void trap(View view){
        //click function
        }

        private void additionalFunction(){}

}

那么如何更改自己的代码呢?任何建议都表示赞赏,让我知道是否需要更多详细信息。谢谢

1 个答案:

答案 0 :(得分:1)

如果要添加其他功能,则无法通过更改现有代码来执行此操作。

ANdroid APK是只读的。你不能写它,所以你不能改变APK中的.java文件。

然而:

您可以创建一个加载新方法的类(注意数据库,共享首选项或文件是必需的)并删除它们的功能,并采取适当的操作,而无需将方法写入APK。

基本上,您希望在不将其写入APK的情况下执行该方法,因此您需要设计一个可以执行这些方法的类。

您可以在内部或外部存储中创建外部类(仅文件)。然后你写任何方法到该类。 Refer this SO question了解如何在外部.java文件中加载和执行代码。

请注意,这是一种解决方法。您无法写入APK,但您可以将.java文件写入系统并加载它们并在运行时执行它们。

最后的注释

第一个选项(创建一个加载方法并在应用程序内部执行它们的类)非常困难。甚至可能是不可能的。第二个选项(在外部创建.java文件并加载它)可能是最简单的选择。您可以在外部保存文件并添加所需的任何方法,并在您希望使用这些方法的类中创建外部类的新实例。这是(我知道)您可以创建文件并使其可编辑的唯一方法。 / p>

我不能说足够多的时间:

APK是只读的!

你不能写入APK,但你可以从中读取。例如,oyu可以读取资产,但您无法写入资产。

“更改”APK内容的唯一方法是解码旧内容,添加所需的任何更改并创建新的apk。但是执行此操作的过程需要root,并且将整个系统添加到执行其他操作的应用程序将为您的应用程序添加大量膨胀。此外,它很可能会使用不同的密钥库进行签名,并可能使其与商店版本不兼容,这可能会在将来删除更新选项。

根据你的评论,我显然不得不再说一次:

您无法像更改文本文件一样更改APK! APK就像一个压缩文件。要更改它,您必须将其解压缩然后进行编辑。意思是不管你在想什么编程语言,你必须解压APK,更改它并重新打包。正如我上面提到的,这有很多副作用。

正如你在另一篇评论中所提到的,如果你突然想到窗口和那里的功能,那就是另一个主题(以及一组完全不同的开发人员)。提出另一个问题,而不是在一个

中有两个截然不同的问题