heiher / hev-socks5-tunnel

A high-performance tun2socks for Linux/Android/FreeBSD/macOS/iOS/WSL2 (IPv4/IPv6/TCP/UDP)
MIT License
636 stars 130 forks source link

Starting as a process #98

Closed mistek131995 closed 4 months ago

mistek131995 commented 4 months ago

Hi, I'm new to android, can I run your project on the android system as a process? When I run other libraries as a process, I get a log, but when I run your library, I don't see a log. Is such a launch possible and am I doing everything right? The code is attached. The library is built using ndk with the extension *.so.

` val config = arrayListOf( "tunnel:", " name: tun0", " mtu: 1500", " ipv4:", " gateway: 10.14.1.1", " address: 10.14.1.2", " prefix: 24", "socks5:", " address: 127.0.0.1", " port: 10808", " udp: udp", "" ).joinToString("\n")

    fun tun2socksPath(): String = "${applicationContext.applicationInfo.nativeLibraryDir}/libhev-socks5-tunnel.so"
    val configPath = applicationContext.filesDir.absolutePath + "/tun2socksConfig.json"
    val configFile = File(configPath)
    configFile.writeText(config);

    configFile.createNewFile()

    Thread{
        val processCommand = arrayListOf<String>(
            tun2socksPath(),
            configPath
        )

        val processBuilder = ProcessBuilder(processCommand).directory(applicationContext.filesDir)

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            val tun2socksLog = File(applicationContext.filesDir.absolutePath + "/tun2socks_log.log")
            tun2socksLog.createNewFile()

            processBuilder.redirectError(tun2socksLog)
            processBuilder.redirectInput(tun2socksLog)
            processBuilder.redirectOutput(tun2socksLog)
        }

        tun2socksProcess = processBuilder.start()
        tun2socksProcess.waitFor()

    }.start()`
mistek131995 commented 4 months ago

Can I use this example if I manually built the library in *.so?

Example (Line 31, 32, 151, 166) - https://github.com/heiher/sockstun/blob/master/app/src/main/java/hev/sockstun/TProxyService.java

heiher commented 4 months ago

Why need to run as a process? I think you can build it to an executable.

https://github.com/heiher/hev-socks5-tunnel/blob/master/Android.mk#L47

include $(BUILD_EXECUTABLE)
mistek131995 commented 4 months ago

Why need to run as a process? I think you can build it to an executable.

https://github.com/heiher/hev-socks5-tunnel/blob/master/Android.mk#L47

include $(BUILD_EXECUTABLE)

I have this error, when I use this

`companion object { init { System.loadLibrary("hev-socks5-tunnel") } }

private external fun TProxyStartService(configPath: String, fd: Int)
private external fun TProxyStopService()`

But I have *.so file in lib in my apk file.

java_vm_ext.cc:591] JNI DETECTED ERROR IN APPLICATION: JNI RegisterNatives called with pending exception java.lang.ClassNotFoundException: Didn't find class "hev.htproxy.TProxyService" on path: DexPathList[[zip file "/data/app/~~c2MipfsEQKx1DsrJ9xZv8w==/com.example.lockvpnandroidapp-HOwYSzVe_lxzrepOr7SF3w==/base.apk"],nativeLibraryDirectories=[/data/app/~~c2MipfsEQKx1DsrJ9xZv8w==/com.example.lockvpnandroidapp-HOwYSzVe_lxzrepOr7SF3w==/lib/arm64, /data/app/~~c2MipfsEQKx1DsrJ9xZv8w==/com.example.lockvpnandroidapp-HOwYSzVe_lxzrepOr7SF3w==/base.apk!/lib/arm64-v8a, /system/lib64, /system/system_ext/lib64]] java_vm_ext.cc:591] at java.lang.Class dalvik.system.BaseDexClassLoader.findClass(java.lang.String) (BaseDexClassLoader.java:259) java_vm_ext.cc:591] at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String, boolean) (ClassLoader.java:379) java_vm_ext.cc:591] at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String) (ClassLoader.java:312) java_vm_ext.cc:591] at java.lang.String java.lang.Runtime.nativeLoad(java.lang.String, java.lang.ClassLoader, java.lang.Class) (Runtime.java:-2) java_vm_ext.cc:591] at java.lang.String java.lang.Runtime.nativeLoad(java.lang.String, java.lang.ClassLoader) (Runtime.java:1126) java_vm_ext.cc:591] at void java.lang.Runtime.loadLibrary0(java.lang.ClassLoader, java.lang.Class, java.lang.String) (Runtime.java:1080) java_vm_ext.cc:591] at void java.lang.Runtime.loadLibrary0(java.lang.Class, java.lang.String) (Runtime.java:1003) java_vm_ext.cc:591] at void java.lang.System.loadLibrary(java.lang.String) (System.java:1661) java_vm_ext.cc:591] at void service.XrayVpnService.<clinit>() (XrayVpnService.kt:18) java_vm_ext.cc:591] at java.lang.Object java.lang.Class.newInstance() (Class.java:-2) java_vm_ext.cc:591] at android.app.Service android.app.AppComponentFactory.instantiateService(java.lang.ClassLoader, java.lang.String, android.content.Intent) (AppComponentFactory.java:129) java_vm_ext.cc:591] at android.app.Service androidx.core.app.CoreComponentFactory.instantiateService(java.lang.ClassLoader, java.lang.String, android.content.Intent) (CoreComponentFactory.java:74) java_vm_ext.cc:591] at void android.app.ActivityThread.handleCreateService(android.app.ActivityThread$CreateServiceData) (ActivityThread.java:4868) java_vm_ext.cc:591] at void android.app.ActivityThread.-$$Nest$mhandleCreateService(android.app.ActivityThread, android.app.ActivityThread$CreateServiceData) (ActivityThread.java:-1) java_vm_ext.cc:591] at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:2425) java_vm_ext.cc:591] at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:106) java_vm_ext.cc:591] at boolean android.os.Looper.loopOnce(android.os.Looper, long, int) (Looper.java:223) java_vm_ext.cc:591] at void android.os.Looper.loop() (Looper.java:324) java_vm_ext.cc:591] at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:8595) java_vm_ext.cc:591] at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:-2) java_vm_ext.cc:591] at void com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run() (RuntimeInit.java:582) java_vm_ext.cc:591] at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:1061) java_vm_ext.cc:591] java_vm_ext.cc:591] in call to RegisterNatives java_vm_ext.cc:591] from java.lang.String java.lang.Runtime.nativeLoad(java.lang.String, java.lang.ClassLoader, java.lang.Class)

mistek131995 commented 4 months ago

If someone encounters the same problem, the service class should be called TProxyService and is located along this path hev.htproxy

heiher commented 4 months ago

You can override the package name in your project code.

https://github.com/heiher/sockstun/blob/master/app/src/main/jni/Application.mk#L19