Mac用Docker安装Oracle11g并连接Navicat
原文转载自大佬笑等茶凉
1.下载并安装Docker
官方下载地址:https://download.docker.com/mac/stable/Docker.dmg
2.用docker下载镜像,在终端输入:
docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
3.启动oracle镜像作为容器:
docker run -d -p 1521:1521 –name oracle11g registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
4.进入镜像配置
docker exec -it oracle11g bash
Android混淆
代码混淆(Obfuscated code)亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读和理解的形式的行为。
为什么要加代码混淆?
不想开源应用,为了加大反编译的成本,但是并不能彻底防止反编译
开启混淆
- 通常我们需要找到项目路径下app目录下的build.gradle文件
- 找到minifyEnabled这个配置,然后设置为true即可.proguard-rules.pro文件的作用
1
2
3
4release{
minifyEnabled true//是否启动混淆 ture:打开 false:关闭
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
} - 只要在工程应用目录的gradle文件中设置minifyEnabled:true即可。然后我们就可以到proguard-rules.pro文件中加入我们的混淆规则了
RxJava学习笔记一
Hello World!
- RxJava1.1.7.jar
代码演示:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36public static void main(String[] args) {
//第一步、创建被观察者
Observable<String> mObservable = Observable.create(new OnSubscribe<String>(){
@Override
public void call(Subscriber<? super String> subscriber) {
subscriber.onNext("Hello World!");
subscriber.onCompleted();
}
});
//第二步、创建观察者
Subscriber<String> mSubscriber = new Subscriber<String>() {
@Override
public void onCompleted() {
// TODO Auto-generated method stub
System.out.println("onCompleted");
}
@Override
public void onError(Throwable arg0) {
// TODO Auto-generated method stub
System.out.println("onError");
}
@Override
public void onNext(String arg0) {
// TODO Auto-generated method stub
System.out.println("OnNext:"+arg0);
}
};
//第三步、订阅事件
mObservable.subscribe(mSubscriber);
}例如代码中所演示的,RxJava的使用就是那么简单,通过订阅事件将被观察者和观察者进行绑定。
Android消息传递机制总结(五)
Android消息传递机制总结(四)
Android消息传递机制总结(三)
Android消息传递机制总结(二)
Android消息传递机制总结(一)
dynamic、var、Object三者的区别
dynamic:
是所有Dart对象的基础类型, 在大多数情况下,通常不直接使用它,
通过它定义的变量会关闭类型检查,这意味着dynamic x = 'hal';x.foo();
这段代码静态类型检查不会报错,但是运行时会crash,因为x并没有foo()方法,所以建议大家在编程时不要直接使用dynamic;
var:
是一个关键字,意思是“我不关心这里的类型是什么。”,系统会自动推断类型runtimeType;
Object:
是Dart对象的基类,当你定义:Object o=xxx;时这时候系统会认为o是个对象,你可以调用o的toString()和hashCode()方法
因为Object提供了这些方法,但是如果你尝试调用o.foo()时,静态类型检查会进行报错;
总结:
综上不难看出dynamic与Object的最大的区别是在静态类型检查上;