Android中实现开机自动启动服务(service)实例

2019-12-10 20:02:11刘景俊
易采站长站为您分析Android中实现自动启动服务实例,并开机自动启用(无activity),的朋友可以参考下    

最近在将 HevSocks5Client 移植到 Android 上了,在经过增加 signalfd 和 timerfd 相关的系统调用支持后,就可以直接使用 NDK 编译出 executable 了。直接的 native exectuable 在 Android 系统总还是不太方便用哦。还是做成一个 apk 吧,暂定只写一个 service 并开机自动启用,无 activity 的。

Java 中调用 native 程序我选择使用 JNI 方式,直接在 JNI_OnLoad 方法中调用 pthread_create 创建个线程跑原来的 main 就行啦。

 

复制代码
...
#if defined(ANDROID)
#include <jni.h>
#include <pthread.h>
#endif

int
main (int argc, char *argv[])
{
    ...
}

#if defined(ANDROID)
static void *
thread_handler (void *data)
{
    main (0, NULL);
    return NULL;
}

jint
JNI_OnLoad (JavaVM *vm, void *reserved)
{
    pthread_t thread;
    pthread_create (&thread, NULL, thread_handler, NULL);
    return JNI_VERSION_1_4;
}
#endif

 


Android 服务

服务主要是加载 JNI 接口的 hev-socks5-client 库,使服务跑起来。

复制代码
package hev.socks5;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;

public class MainService extends Service {

        static {
                System.loadLibrary("hev-socks5-client");
        }

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

 

BroadcastReceiver

ServiceReceiver 的功能就是监听系统上的 BOOT_COMPLETED 事件,用于实现自动启动服务。

复制代码
package hev.socks5;

import android.content.BroadcastReceiver;