在Android上使用gRPC
1.Hello
syntax = "proto3"; option java_multiple_files = true; package hello; service Hello { rpc SayHello (HelloRequest) returns (HelloReply); } message HelloRequest { string name = 1; } message HelloReply { string message = 1; }
2.gRPCService
import hello.HelloGrpc; import io.grpc.ManagedChannel; import io.grpc.ManagedChannelBuilder; public class gRPCService { private static final String gRPC_HOST = "isilent.me"; private static final int gRPC_PORT = 80; private static gRPCService instance; private ManagedChannel mChannel; public static gRPCService getInstance() { if (instance == null) { instance = new gRPCService(); } return instance; } private gRPCService() { } /** * 获取Channel * * @return */ private ManagedChannel getChannel() { if (mChannel == null || mChannel.isShutdown()) { // 设置最大接收消息大小为20M mChannel = ManagedChannelBuilder.forAddress(gRPC_HOST, gRPC_PORT).usePlaintext().maxInboundMessageSize(20 * 1024 * 1024).build(); } return mChannel; } /** * 获取Hello存根 * * @return */ public HelloGrpc.HelloStub getHelloStub() { return HelloGrpc.newStub(getChannel()); } }
3.SimpleStreamObserver
import android.os.Handler; import android.os.Looper; import io.grpc.stub.StreamObserver; public abstract class SimpleStreamObserver<T> implements StreamObserver<T> { private static Handler handler = new Handler(Looper.getMainLooper()); @Override public void onCompleted() { } @Override public void onNext(final T value) { // 返回主线程 handler.post(new Runnable() { @Override public void run() { onSuccess(value); } }); } /** * 请求成功的回调 * * @param value */ protected abstract void onSuccess(T value); }
4.Main
public static void Main() { HelloRequest request = HelloRequest.newBuilder().setName("hello").build(); gRPCService.getInstance().getHelloStub().sayHello(request, new SimpleStreamObserver<HelloReply>() { @Override protected void onSuccess(HelloReply value) { System.out.println(value.getMessage()); } @Override public void onError(Throwable t) { } }); }
JAVA值传递
JAVA使用的是一种名为值传递的求值策略,这种策略在传值过程中会复制实参的引用,并将这份拷贝传入到方法形参中,所以对形参的任何重赋值操作都不会对实参产生影响。
参考链接:
在Android上配置gRPC的环境
1.下载安装Protobuf Support插件,如图所示:
2.在项目根目录的 build.gradle 的 buildscript 中加入 protobuf-gradle-plugin 插件:
buildscript { ... dependencies { ... classpath "com.google.protobuf:protobuf-gradle-plugin:0.8.12" } }
3.在应用Module的 build.gradle 中进行如下配置
apply plugin: 'com.android.application' apply plugin: 'com.google.protobuf' protobuf { protoc { artifact = 'com.google.protobuf:protoc:3.11.0' } plugins { grpc { artifact = 'io.grpc:protoc-gen-grpc-java:1.29.0' } } generateProtoTasks { all().each { task -> task.builtins { java { option 'lite' } } task.plugins { grpc { option 'lite' } } } } } dependencies { // gRPC implementation 'io.grpc:grpc-okhttp:1.29.0' implementation 'io.grpc:grpc-protobuf-lite:1.29.0' implementation 'io.grpc:grpc-stub:1.29.0' implementation 'javax.annotation:javax.annotation-api:1.2' }
4.最后将 .proto 协议文件放在 src/main/proto/ 文件夹下,点击build进行编译,如果出现如下图,则证明环境配置成功!
参考链接:
RK3399配置build.prop
准备
1.启动root模式
adb root
2.重新挂载文件系统
adb remount
3.拷贝文件
adb pull /system/build.prop
修改
1.修改硬件屏幕方向
ro.sf.hwrotation=0
2.修改屏幕分辨率
persist.sys.framebuffer.main=1920×1080
3.隐藏虚拟按键
qemu.hw.mainkeys=1
配置
1.覆盖文件
adb push build.prop /system
参考链接:
【转】[RK3399—Android7.1] 默认屏幕显示方向
转载自:[RK3399—Android7.1] 默认屏幕显示方向
/system/build.prop
文件中 ro.sf.hwrotation=0
这里可以90、180、270
修改后同步,重启,可调整默认旋转方向。
镜像直接默认修改:device/rockchip/rk3399/build.prop 中 ro.sf.hwrotation=0 属性
【转】Win10 LTSC 恢复照片查看器
新装的WIN10 LTSC 2019,发现默认看图则是画图,并不是照片查看器。
对WIN10 不太了解,不知道现在WIN10正确的看图方式还是不是照片查看器,但不管怎么样,照片查看器用的习惯了,所以想用回照片查看器,以下是操作教程:
新建一个文本文件,并复制以下代码粘贴保存,修改后缀为.bat
@echo off&cd\&color 0a&cls echo 恢复Win10照片查看器 reg add "HKLM\SOFTWARE\Microsoft\Windows Photo Viewer\Capabilities\FileAssociations" /v ".jpg" /t REG_SZ /d PhotoViewer.FileAssoc.Tiff /f reg add "HKLM\SOFTWARE\Microsoft\Windows Photo Viewer\Capabilities\FileAssociations" /v ".jpeg" /t REG_SZ /d PhotoViewer.FileAssoc.Tiff /f reg add "HKLM\SOFTWARE\Microsoft\Windows Photo Viewer\Capabilities\FileAssociations" /v ".bmp" /t REG_SZ /d PhotoViewer.FileAssoc.Tiff /f reg add "HKLM\SOFTWARE\Microsoft\Windows Photo Viewer\Capabilities\FileAssociations" /v ".png" /t REG_SZ /d PhotoViewer.FileAssoc.Tiff /f echo 请双击或右击图片,选择“照片查看器”即可 pause
如果不会创建操作的,可以直接点击下载,然后一定要点击鼠标右键,以管理员身份运行,运行完毕后,随便找一张照片,右键,打开方式,选择照片查看器即可。