这里只是做一个phpstudy的配置回顾,因为我也是配置成功之后回头来梳理一下,有的细节可能忘掉了,尽量弄详细一些!
phpStudy是一个PHP调试环境的程序集成包。

该程序包集成最新的Apache+PHP+MySQL+NIGINX+phpMyAdmin+ZendOptimizer,一次性安装,无须配置即可使用,是非常方便、好用的PHP调试环境.该程序不仅包括PHP调试环境,还包括了数据库、开发工具、开发手册等.。同时phpStudy还自带有openssl工具(我们证书生成所要用到的);
下载地址:http://phpstudy.php.cn/
解压后的客户端
正常启动后的客户端:

默认的服务器应该是php+apache,因为apache的双向验证资料太少所以我选择了用nginx服务器:
切换NGINX服务器
服务器切换完毕之后,打开vhosts文件
打开vhosts
简单的服务器配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
server {
listen 443 ssl; #http的端口号是80,https的端口为443
server_name www.test.com #服务器域名 配置多个时不要添加;号即可
ServerName 127.0.0.1
ServerName 192.168.0.111; #本机电脑的ip地址
ssl on; #开启ssl
ssl_certificate C:\Users\Administrator\Desktop\ssl4\server.cer; #服务器证书文件
ssl_certificate_key C:\Users\Administrator\Desktop\ssl4\server.key; #服务器证书密匙
ssl_client_certificate C:\Users\Administrator\Desktop\ssl4\ca.cer; #根证书
ssl_verify_depth 1; #这里不是必须的,好像是根证书层级!
ssl_verify_client on; #开启客户端验证
location / {
root F:\PHPStudy\PHPTutorial\WWW; #本地网站文件目录
index index.HTML index.html index.htm ;
}
}

html本地文件的路径会有差异,自己配置一下应该不难!
html路径
html里面的内容:

1
2
3
4
5
6
7
8
<html>
<head><title>测试Demo</title></head>
<body bgcolor="white">
<center><h1>测试</h1></center>
<center>123456</center>
<hr><center>aaa</center>
</body>
</html>

打开phpstudy自带的openssl工具,在后面证书生成的时候需要:
openssl工具

到这里基本上就已经配置完了,还是比较简单的!
正常状态的话下面2个圆点都是绿色的,红色的话说明是哪里配置错误了,因为现在端口号配置的是https所以本地是打不开的 !其他的可以自己百度一下其他资料,也可以查看一下PHPStudy\PHPTutorial\nginx\logs目录下的成功或者错误日志!
image.png
####各类知识点整理:

####工具类:

####源码:

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
36
37
38
39
40
41
42
43
44
45
<!--系统默认入口-->
<activity android:name=".login_moudle.StartActivity"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
>
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<!--<category android:name="android.intent.category.LAUNCHER"/> 注释掉LAUNCHER-->
</intent-filter>
</activity>
<!--
icon-桌面图标
name-名称可以随意
label-可以省略 修改应用名称
targetActivity-要跳转的activity(主activity)
enabled-不要动态修改
-->
<!--默认图标-->
<activity-alias
android:icon="@mipmap/ic_launcher"
android:name="default"
android:label="@string/app_name"
android:targetActivity=".login_moudle.StartActivity"
android:enabled="true">

<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>
<!--要修改的图标-->
<activity-alias
android:icon="@mipmap/ic_launcher_round"
android:name="icon1"
android:label="@string/call_110"
android:targetActivity=".login_moudle.StartActivity"
android:enabled="false">

<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>

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
36
37
public class StartActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
final ComponentName iconCom = new ComponentName(StartActivity.this, "com.guoshikeji.driver95128.icon1");//这里填写的是 包名+activity-alias中的name
final ComponentName defaultCom = new ComponentName(StartActivity.this, "com.guoshikeji.driver95128.default");

findViewById(R.id.bn_default).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {//切换为icon1图标
enableComponent(iconCom);
disableComponent(defaultCom);
}
});

findViewById(R.id.bn_icon1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {//切换为default图标
enableComponent(defaultCom);
disableComponent(iconCom);
}
});
}
//不可用状态:COMPONENT_ENABLED_STATE_DISABLED
//可用状态:COMPONENT_ENABLED_STATE_ENABLED
//默认状态:COMPONENT_ENABLED_STATE_DEFAULT
private void enableComponent(ComponentName componentName) {
getPackageManager().setComponentEnabledSetting(componentName,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 0);
}
private void disableComponent(ComponentName componentName) {
getPackageManager().setComponentEnabledSetting(componentName,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0);
// 0立即生效会杀掉进程 DONT_KILL_APP约10秒后生效 android10也会杀掉进程 10以下不会
}
}

以上方式测试android10以下可以完美实现替换图标功能,android10测试仍会杀掉进程,我个人的处理方式是在android10的手机上监听应用退到后台时进行更换,不影响应用内在线版本升级

####一、本地配置
工程的buil.grade添加

1
classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1'

#####plugin版本需对应下图:

pluginVersion
库模块的buil.grade开头添加:

1
2
3
apply plugin: 'com.android.library'
apply plugin: 'com.github.dcendents.android-maven'
group='com.github.fs437563'//其中fs437563是GitHub的用户名

做好以上两点修改后,把代码上传同步到GitHub上。

###二、GitHub上创建版本

代码传好后,在GitHub的【Code】页,选择“releases”进去新建版本。注意版本号要认真填写,例如可以是:v1.0

###三、JitPack查询

打开JitPack ,输入GitHub项目地址,例如:https://github.com/fs437563/JetShineBoxSwitchPower
点击查询,则可以查询到发布的版本列表。
image.png
Log处标签是绿色则配置成功,红色为失败;

###四、集成使用
选取一个最新的版本,点击“Get it”,下面会在“How to”里出现集成使用方法,非常简单

####java的内存划分为5个部分:
#####1. 栈(Stack):存放的都是方法中的局部变量,方法的运行一堆是在栈当中运行.

局部变量:方法的参数或者是方法{}内部的变量.
作用域:一旦超出作用域,立刻从栈内存当中消失.
2. 堆(Heap):凡是new出来的东西都在堆当中
堆内存里面的东西都要一个地址值:16进制
堆内存里面的数据都要默认值.如:
整数 默认为0
浮点数 默认为0.0
字符 默认为"\u0000"
布尔 默认为false
引用类型 默认为null
3.方法区(Meathod Area):存储.class相关信息,包含方法的信息.
4. 本地方法栈(Native Method Stack):与操作系统相关.
5.寄存器(Pc Register):与CPU相关.

####数组在内存当中的图形表示:

内存的使用

1
2
3
4
5
6
7
8
9
10
11
12
13
&#32; == 普通的英文半角空格

&#160; == &nbsp; == &#xA0; == no-break space (普通的英文半角空格但不换行)

&#12288; == 中文全角空格 (一个中文宽度)

&#8194; == &ensp; == en空格 (半个中文宽度)

&#8195; == &emsp; == em空格 (一个中文宽度)

&#8197; == 四分之一em空格 (四分之一中文宽度)

相比平时的空格(&#32;),nbsp拥有不间断(non-breaking)特性。即连续的nbsp会在同一行内显示。即使有100个连续的nbsp,浏览器也不会把它们拆成两行。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:text="性&#12288;&#12288;别:"
android:textColor="#666666"
android:textSize="10dp" />

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:text="手&#8194;机&#8194;号:"
android:textColor="#666666"
android:textSize="10dp" />

找到系统盘下的这个目录:C:\Windows\System32\drivers\etc
image.png
打开etc文件夹后在最后面添加:

1
2
140.82.112.4      www.github.com
199.232.68.133 raw.githubusercontent.com

image.png
保存后即可!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private boolean isExistMainActivity(Class<?> activity) {
Intent intent = new Intent(this, activity);
ComponentName cmpName = intent.resolveActivity(getPackageManager());
boolean flag = false;
if (cmpName != null) {// 说明系统中存在这个activity    
ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> taskInfoList = am.getRunningTasks(10);//获取从栈顶开始往下查找的10个activity  
for (ActivityManager.RunningTaskInfo taskInfo : taskInfoList) {
if (taskInfo.baseActivity.equals(cmpName)) {// 说明它已经启动了    
flag = true;
break;//跳出循环,优化效率  
}
}
}
return flag;//true 存在 falese 不存在
}
常用命令 描述
pwd 显示当前路劲
cd xx 切换到xx路径
cd .. 切换到上级路径
cd ~ 快速返回根目录
clear 清空命令列表
ls 当前路上下所有文件 (ls后面可以一起输入 比如:ls _lh,ls_lah(没有顺序要求))
ls _l 列表形式显示文件
ls _a 显示隐藏文件
ls _l _h 列表显示并kb显示文件大小
ls 通配符: *代表0或多个任意字符
ls *.txt 显示.txt结尾的文件
ls 1* 显示所有以1开头的文件
ls 1*.txt 显示所有1开头.txt结尾的文件
ls xx 列出制定路径的文件及文件夹
代表1个任意字符(不能?单独使用需要有匹配信息)
ls ??.txt 显示2个字符并且.txt结尾的文件
ls [0_9] [a_z] 可以直接写区间
tab键 自动不全(有多个匹配的情况下默认不补全,按2次tab键匹配)
方向键上/下 快捷读取历史命令
1
2
1.隐藏文件都是以.开头,创建隐藏文件也是命名时.开头命名即可;
2.''路径或者名称有空格的 可以用''包含起来
文件常用命令 描述
touch xx.txt 创建xx.txt文件到当前路径
mkdir xx 创建xx文件夹
rm xx.txt 移除xx文件
rm -d xx rm -d 移除文件夹(空目录)
rm -r xx rm -r移除文件夹(非空目录)
mv xx.txt aa 移动xx文件或xx文件夹到aa文件夹,目标路径可以是相对路径或绝对路径(可移动时重命名)
cp xx.txt aa 复制xx文件到aa文件夹(可复制时重命名)
cp -r xx aa 复制xx文件夹到aa文件夹
xx –help 查看某个命令的帮助手册
man xx 查看某个命令的帮助手册
which xx 查看xx命令对应的文件对应路径
find 搜索范围 搜索条件 示例:find /home -name 123.txt //精准搜索 find /hone -name *.txt //模糊搜索 find /home -iname *.txt //不区分大小写 find /home -type f //-type f搜索所有文件,-type d搜索所有文件夹,-type l所有软链接
locate xx 全局模糊搜索xx文件及文件夹,搜索速度快,缺点有可能搜索不到最新创建的文件或文件夹,原因是locate本地自身有搜索库,新建的文件被收录到搜索库有延迟
cat xx 打开xx文件
more xx 分页显示xx文件,按空格翻页
echo xx 显示xx内容
echo 内容 > 文件 >把xx内容输入到xx文件,>覆盖原有内容, >>追加内容
|(管道) 前面的结果作为输入,执行后面的命令使用,如:ls -lh | reap 123.txt
ln 目标路径 创建路径及名称(软链接/快捷方式) ln aa/123.txt 123.txt //ln -s 文件完整路径 链接到的目标路径(在2个目录的顶层执行,方便输入路径)
sudo gedit xx 打开xx路径的文件

####挂载硬盘到指定分区

1
2
3
4
5
6
7
8
9
10
11
12
13
df -h     查看数据盘所在的磁盘分区
mkfs -t ext4 /dev/dsa 格式化为ext4格式,/dev/dsa是指要挂载的硬盘
mkdir workSpace 在系统盘创建被挂载的文件夹,如/home/workSpace
sudo mount /dev/dsa /home/workSpace //mount 挂载的分区硬盘 当前系统的目标文件夹
sudo gedit /etc/fstab //在打开系统盘文件的末尾添加一行,指定要挂载的硬盘信息。
/dev/dsa /home/workSpace ext4 defaults 0 2 //保存并关闭文件

sudo chmod 777 /home/workSpace //将该文件夹的访问权限设置为普通用户,不然每次都没有权限读写
sudo mount -a

reboot
df -h //再次查看挂载是否成功
//挂载完成;
描述 命令
linux安装vim sudo apt-get install vim
打开目标文件 vim MainActivity.java(目标路径)
不保存退出 :q
保存后退出 :wq
k
j
h
l
进入插入模式,进入可编辑模式 i 或a 或c
进入普通模式,退出可编辑模式 esc
进入可视模式,用来选中文字 小写v键(普通可视,自由选中),大写V键(行可视,只能整行选中),ctrl+v(列可视,整列的选中或移动)
光标移动到下一单词的开头 w
光标移动到上一单词的开头 b
光标移动到下一单词的结尾 e
光标移动到下一单词的结尾 ge
查找并移动到下一个{char}字符处 f{char} (分开按)
查找并移动到上一个{char}字符处 F{char}
查找并移动到下一个{char}字符的前一个字符处 t{char}
查找并移动到上一个{char}字符的前一个字符处 T{char}
重复上一次的字符查找命令
反转方向重复上一次的字符查找命令
分隔符文本对象选择,a(选中分隔符及分隔符包含的内容) 需要在v模式下执行,如: a(或ab ,选中()及包含的内容;其他符号如(),{},[],<>,””,’’同理
分隔符文本对象选择,i(选中分隔符内部的内容,不包含分隔符) 需要在v模式下执行,如: i(或ib ,选中()包含的内容不包含()符号;其他符号如(),{},[],<>,””,’’同理
范围文本对象,选中当前单词 iw
范围文本对象,选中当前单词及一个空格 aw
范围文本对象,选中当前单词或字符串 iW
范围文本对象,选中当前单词或字符串及一个空格 aW
范围文本对象,选中当前句子 is
范围文本对象,选中当前句子及一个空格 as
范围文本对象,选中当前段落 ip
范围文本对象,选中当前段落及一个空格 ap
删除模式 d 分隔符文本对象或范围文本对象(上面提到的命令),如diw删除当前单词,dis删除当前句子
修改模式 c 分隔符文本对象或范围文本对象(上面提到的命令),如ciw删除当前单词并进入编辑模式,cis删除当前句子并进入编辑模式
复制模式 y 分隔符文本对象或范围文本对象(上面提到的命令),如yiw复制当前单词,yis复制当前句子
删除一行 dd
删除一行并进入插入模式 cc
复制一行 yy
粘贴 p
恢复上步操作/撤销 u
设置标记 m{make} ,({make}是指任意键,如mm,可以同时标记多个)
返回标记 ` {make},`是esc下面那个键
返回行首 gg

vim代码提示器插件配置链接:https://pan.baidu.com/s/1uKEsv8vVhHjD8dF4lOt8cA 提取码:l11q

代码提示器快捷键:xx 命令 +tab键