You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向反编译的APK添加文件以实现启动时自动执行代码?

解决APK启动时自动运行自定义代码的文件类型问题

首先明确:多数情况下不需要新增特殊类型文件,而是通过注入代码到原有启动组件+(可选)添加辅助文件来实现。如果一定要添加额外文件,常见的可选类型如下:

1. 自定义DEX文件(最通用的扩展方式)

如果你想最小化修改原有代码,可编译一个独立的DEX文件(包含启动时要执行的逻辑),将其放到反编译后的APK目录的assets/或lib/下。随后在原应用的启动入口注入加载DEX的代码即可。

操作步骤:

  • 编写包含启动逻辑的Java类,比如:
    package com.your.custom;
    public class CustomStartup {
        public static void runOnStartup() {
            // 这里写你要在启动时执行的代码
            Log.d("CustomStartup", "启动逻辑执行成功");
        }
    }
    
  • 将该类编译成class文件,再用Android SDK的dx工具打包成DEX(dx --dex --output=custom.dex CustomStartup.class)。
  • 将custom.dex放入反编译后的assets/目录。
  • 在原应用的启动入口(比如自定义Application的onCreate方法,或主Activity的onCreate)添加加载代码:
    try {
        // 加载assets中的custom.dex
        DexClassLoader dexLoader = new DexClassLoader(
            getAssets().openFd("custom.dex").getFileDescriptor(),
            getCacheDir().getAbsolutePath(),
            null,
            getClassLoader()
        );
        Class<?> customClass = dexLoader.loadClass("com.your.custom.CustomStartup");
        Method startupMethod = customClass.getMethod("runOnStartup");
        startupMethod.invoke(null);
    } catch (Exception e) {
        e.printStackTrace();
    }
    

2. Shell脚本文件(仅限Root设备场景)

如果你的应用拥有Root权限,可添加.sh脚本到assets/目录,启动时通过代码复制脚本到可执行目录并执行。这种方式兼容性差,仅适用于Root环境。

示例代码:

try {
    // 从assets复制脚本到应用私有目录
    InputStream is = getAssets().open("startup.sh");
    File outputFile = new File(getFilesDir(), "startup.sh");
    FileOutputStream os = new FileOutputStream(outputFile);
    byte[] buffer = new byte[1024];
    int len;
    while ((len = is.read(buffer)) != -1) {
        os.write(buffer, 0, len);
    }
    is.close();
    os.close();

    // 赋予执行权限并运行脚本
    Runtime.getRuntime().exec("chmod 755 " + outputFile.getAbsolutePath());
    Runtime.getRuntime().exec(outputFile.getAbsolutePath());
} catch (IOException e) {
    e.printStackTrace();
}

关于你之前代码未生效的常见原因

  • 启动入口找错:很多应用会使用自定义Application作为真正的启动入口,而非主Activity;部分应用有启动页(SplashActivity),如果代码加错了页面,就不会触发。
  • 生命周期时机不对:如果代码加在onStart或onResume,某些场景下Activity可能不会立刻进入该生命周期,优先选择Application.onCreate或主Activity的onCreate。
  • 异常静默失败:代码中未捕获异常,导致逻辑执行中断但无提示,建议添加异常打印排查问题。

内容的提问来源于stack exchange,提问作者scott schlimmer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 00:10:44