Coder Social home page Coder Social logo

codezjx / andlinker Goto Github PK

View Code? Open in Web Editor NEW
486.0 22.0 71.0 292 KB

AndLinker is a IPC library for Android, which combines the features of AIDL and Retrofit. Allows IPC call seamlessly compose with RxJava and RxJava2 call adapters.

License: Apache License 2.0

Java 100.00%
aidl ipc rxjava android retrofit2

andlinker's People

Contributors

codezjx avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

andlinker's Issues

Demo code is not correct

        AndLinker.BindCallback pidServiceCallback = new AndLinker.BindCallback() {
            @Override
            public void onBind() {
                pidService = andLinker.create(IPidService.class);
                LogUtils.event(InitEvent).w(TAG, "Process identity is  " + pidService.getPid());

                pid2Service = andLinker.create(IPid2Service.class);
                LogUtils.event(InitEvent).w(TAG, "Process2 identity is " + pid2Service.getPid2());
            }

            @Override
            public void onUnBind() {

            }
        };

        andLinker = new AndLinker.Builder(this)
                .packageName("com.zkteco.android.core")
                .action("com.zkteco.android.core.REMOTE_SERVICE_ACTION")
                .build();
        andLinker.setBindCallback(pidServiceCallback);
        andLinker.bind();

java.lang.NullPointerException: Expected to unbox a 'boolean' primitive type but was returned null

If the server is disconnected, then your client execute the remote method, there will be a crash.
Note: Only appears in scenarios where the return value is the primitive type.

2022-04-18 11:25:25.126 18583-18583/? E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.xxxx.your.app, PID: 18583
    java.lang.NullPointerException: Expected to unbox a 'boolean' primitive type but was returned null
        at $Proxy1.foo(Unknown Source)
        at com.xxx.your.app.method(Test.java:101)
        at android.view.View.performClick(View.java:7448)
        at android.view.View.performClickInternal(View.java:7425)
        at android.view.View.access$3600(View.java:810)
        at android.view.View$PerformClick.run(View.java:28305)
        at android.os.Handler.handleCallback(Handler.java:938)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:223)
        at android.app.ActivityThread.main(ActivityThread.java:7656)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)

Callback 不带参数的方法回调会失败

定义了一个回调接口
@RemoteInterface
public interface IFaceRecognizeCallBack {
void onTrack(@in Rect faceRect);
void onTrackNoFaces();
void onRecognize(int state);
void recognizeSuccess(String faceImagePath, String wholeImagePath);
void recognizeFail(int reasonType, boolean isLiveness);
}
其他回调都正常,但是回调 onTrackNoFaces() 方法会抛异常,写了其他sample代码发现没有参数的方法都会异常
2019-07-11 11:14:16.173 1750-1783/com.terminus.TSLOpenService W/System.err: java.lang.NullPointerException: Attempt to get length of null array
2019-07-11 11:14:16.173 1750-1783/com.terminus.TSLOpenService W/System.err: at com.codezjx.andlinker.Invoker.createCallbackRequest(Invoker.java:173)
2019-07-11 11:14:16.173 1750-1783/com.terminus.TSLOpenService W/System.err: at com.codezjx.andlinker.Invoker.access$100(Invoker.java:18)
2019-07-11 11:14:16.173 1750-1783/com.terminus.TSLOpenService W/System.err: at com.codezjx.andlinker.Invoker$1.invoke(Invoker.java:154)
2019-07-11 11:14:16.173 1750-1783/com.terminus.TSLOpenService W/System.err: at java.lang.reflect.Proxy.invoke(Proxy.java:1006)
2019-07-11 11:14:16.173 1750-1783/com.terminus.TSLOpenService W/System.err: at $Proxy4.onTrackNoFaces(Unknown Source)
2019-07-11 11:14:16.173 1750-1783/com.terminus.TSLOpenService W/System.err: at com.terminus.tslopensdk.ipc.face.recognize.FaceRecognizeImpl.setFaceRecognizeOption(FaceRecognizeImpl.java:19)
2019-07-11 11:14:16.173 1750-1783/com.terminus.TSLOpenService W/System.err: at java.lang.reflect.Method.invoke(Native Method)
2019-07-11 11:14:16.173 1750-1783/com.terminus.TSLOpenService W/System.err: at com.codezjx.andlinker.MethodExecutor.execute(MethodExecutor.java:36)
2019-07-11 11:14:16.173 1750-1783/com.terminus.TSLOpenService W/System.err: at com.codezjx.andlinker.Invoker.invoke(Invoker.java:134)
2019-07-11 11:14:16.173 1750-1783/com.terminus.TSLOpenService W/System.err: at com.codezjx.andlinker.LinkerBinderImpl.execute(LinkerBinderImpl.java:38)
2019-07-11 11:14:16.173 1750-1783/com.terminus.TSLOpenService W/System.err: at com.codezjx.andlinker.ITransfer$Stub.onTransact(ITransfer.java:52)
2019-07-11 11:14:16.173 1750-1783/com.terminus.TSLOpenService W/System.err: at android.os.Binder.execTransact(Binder.java:752)

请教一个问题

我想实现一个主进程,多个副进程的通信,希望是所有副进程给主进程传数据,应该怎么写?
我看你BindingActivity代码里面有这么一段:

mLinker = new AndLinker.Builder(this)
                .packageName(REMOTE_SERVICE_PKG)
                .action(REMOTE_SERVICE_ACTION)
                // Specify the callback executor by yourself
                //.addCallAdapterFactory(OriginalCallAdapterFactory.create(callbackExecutor))
                .addCallAdapterFactory(OriginalCallAdapterFactory.create()) // Basic
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())  // RxJava2
                .build();

那如果是多个remote进程的话,是要注册多个action?怎么注册?麻烦赐教,谢谢

Callback not working right

I have implemented a Callback according to the docs, and it works fine, just that some codes don't get executed in the Callback function

Here's the code

 private val smsCallback = SMSListener { it ->
        Log.d("FayaPay", it)   // This executes

        Toast.makeText(applicationContext, "A new message just arrived\n $it", Toast.LENGTH_LONG).show()   // This doesn't execute 
    }

Please help me out.

crash: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException

Client app crash when server has been killed.

2022-04-18 09:43:40.293 6309-6309/? E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.xxx.xxx, PID: 6309
    java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 
     Caused by: android.os.DeadObjectException
        at android.os.BinderProxy.transactNative(Native Method)
        at android.os.BinderProxy.transact(BinderProxy.java:540)
        at com.codezjx.andlinker.j$a$a.r1(ITransfer.java:5)
        at com.codezjx.andlinker.a.q(AndLinker.java:4)
        at com.codezjx.andlinker.a.g(AndLinker.java:1)
        at com.codezjx.andlinker.a$b.onServiceDisconnected(AndLinker.java:2)
        at android.app.LoadedApk$ServiceDispatcher.doDeath(LoadedApk.java:1973)
        at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1988)
        at android.os.Handler.handleCallback(Handler.java:938)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:223)
        at android.app.ActivityThread.main(ActivityThread.java:7656)
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 

callback 无法使用

我按照 sample 中的方式 在service端 编写了相应的接口
类似:
@RemoteInterface
public interface ITestCallback {
void onTestFired();
}

并且在 App端 调用 linker.registerObject(mTestCallback)
mTestCallBack 为本地实现接口
但在 service 中无法获取此接口,故无法反调此callback,或许使用有误,还请告知正确步骤,谢谢!

关于异常日志打印

// MethodExecutor.java

Response execute(Object[] args) {
    Object result = null;
    int statusCode = Response.STATUS_CODE_SUCCESS;
    String resultMsg = String.format("Call method '%s' successfully!", mMethod.getName());
    Throwable throwable = null;
    try {
        result = mMethod.invoke(mTarget, args);
    } catch (IllegalAccessException e) {
        statusCode = Response.STATUS_CODE_ILLEGAL_ACCESS;
        throwable = e;
    } catch (InvocationTargetException e) {
        statusCode = Response.STATUS_CODE_INVOCATION_FAIL;
        throwable = e;
    }
    if (throwable != null) {
        resultMsg = "Exception occur when execute method:" + mMethod.getName() + '\n' + throwable.getMessage();

        // 增加
        throwable.printStackTrace();
    }
    return new Response(statusCode, resultMsg, result);
}

// 增加
throwable.printStackTrace();
建议这里加上异常堆栈打印,方便定位异常问题

如何支持多个客户端?

比如有两个APP要连接到同一个服务?另外请教一下,如果有多个客户端连接的时候,服务端该如何保证线程安全?谢谢。

快速绑定解绑来回操作必现没有回调

写了个activity
onCreate里去初始化绑定,onDestroy里解绑, 然后进行快速打开关闭页面的测试

绑定和解绑都可以正确进行
远端方法也能成功调用

只有callback,第一次成功,重新打开页面就完全没反应,
过好久再打开页面才有回调。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.