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

如何创建可通过ADB调用的隐藏式Android后台服务以获取IP及检测网络

解决方案步骤

1. 基于Android原生服务开发(无需Root)

因为设备未Root,无法直接操作系统级隐藏组件,所以选择开发一个无UI的Android后台服务:

  • 服务设置android:exported="false",阻止其他第三方应用通过隐式Intent调用
  • 借助ADB的Shell权限,通过显式组件名调用服务(ADB拥有系统级调用权限,不受exported=false限制)

2. 核心功能实现(替代ping/curl)

网络连通性检测

不用系统ping命令,改用Java原生InetAddress.isReachable()方法,可检测是否能连通Google DNS(8.8.8.8),无需Root权限,还能自定义超时时间。

公网IP获取

不用系统curl命令,直接在服务内用HttpURLConnection或OkHttp发起HTTP请求,调用指定的IP查询API,避免依赖系统命令的限制。

3. 服务隐藏与ADB调用逻辑

  • 服务通过Intent的action参数区分执行逻辑(比如GET_IP和CHECK_NETWORK)
  • 执行结果输出到自定义Logcat标签,通过ADB读取Logcat获取结果,无需额外的IPC机制

4. 关键代码示例

服务核心代码

public class IpCheckerService extends Service {
    public static final String TAG = "IpCheckerTag";
    public static final String ACTION_GET_IP = "GET_IP";
    public static final String ACTION_CHECK_NETWORK = "CHECK_NETWORK";
    private static final String IP_API_URL = "https://api.ipify.org/?format=json";
    private static final String GOOGLE_DNS = "8.8.8.8";
    private static final int CHECK_TIMEOUT = 3000; // 3秒超时

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        if (intent != null) {
            String action = intent.getStringExtra("action");
            switch (action) {
                case ACTION_GET_IP:
                    fetchPublicIp();
                    break;
                case ACTION_CHECK_NETWORK:
                    checkNetworkReachability();
                    break;
            }
        }
        return START_STICKY;
    }

    private void fetchPublicIp() {
        new Thread(() -> {
            try {
                URL url = new URL(IP_API_URL);
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                conn.setRequestMethod("GET");
                conn.setConnectTimeout(5000);

                if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
                    BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                    StringBuilder response = new StringBuilder();
                    String line;
                    while ((line = reader.readLine()) != null) {
                        response.append(line);
                    }
                    reader.close();
                    Log.d(TAG, "Public IP Result: " + response.toString());
                } else {
                    Log.d(TAG, "IP Fetch Failed. Code: " + conn.getResponseCode());
                }
                conn.disconnect();
            } catch (Exception e) {
                Log.d(TAG, "IP Fetch Error: " + e.getMessage());
            }
        }).start();
    }

    private void checkNetworkReachability() {
        new Thread(() -> {
            try {
                InetAddress address = InetAddress.getByName(GOOGLE_DNS);
                boolean isReachable = address.isReachable(CHECK_TIMEOUT);
                Log.d(TAG, "Network Reachability: " + (isReachable ? "Available" : "Unavailable"));
            } catch (Exception e) {
                Log.d(TAG, "Network Check Error: " + e.getMessage());
            }
        }).start();
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
}

AndroidManifest.xml配置

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.your.ip.checker">

    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:allowBackup="false"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true">
        <service
            android:name=".IpCheckerService"
            android:exported="false"
            android:foregroundServiceType="none" />
    </application>

</manifest>

5. ADB调用与结果获取

获取公网IP

adb shell am startservice -n com.your.ip.checker/.IpCheckerService --es action GET_IP
adb logcat -s IpCheckerTag:D -d

检测网络连通性

adb shell am startservice -n com.your.ip.checker/.IpCheckerService --es action CHECK_NETWORK
adb logcat -s IpCheckerTag:D -d

内容的提问来源于stack exchange,提问作者Si si

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 22:50:23