乱码三千 – 分享实用IT技术

乱码三千 – 码出一个新世界


  • 首页

  • 归档

  • 搜索

MAC下使用Tree指令打印目录结构树

发表于 2022-09-17

前言

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
46
47
48
49
50
.
├── app
│   ├── build
│   │   ├── exe
│   │   │   └── main
│   │   │   └── main
│   │   ├── objs
│   │   │   └── main
│   │   │   └── mainCpp
│   │   │   └── c8slc3rovxgcr2csa5t8w6tth
│   │   │   └── HH.o
│   │   └── tmp
│   │   ├── compileMainExecutableMainCpp
│   │   │   ├── options.txt
│   │   │   └── output.txt
│   │   └── linkMainExecutable
│   │   ├── options.txt
│   │   └── output.txt
│   ├── build.gradle
│   ├── libs
│   ├── proguard-rules.pro
│   └── src
│   ├── androidTest
│   │   └── java
│   │   └── com
│   │   └── example
│   │   └── myapplication
│   │   └── ExampleInstrumentedTest.kt
│   ├── main
│   │   ├── c
│   │   │   ├── Hello.c
│   │   │   └── Hello.h
│   │   └── cpp
│   │   └── HH.cpp
│   └── test
│   └── java
│   └── com
│   └── example
│   └── myapplication
│   └── ExampleUnitTest.kt
├── build.gradle
├── gradle
│   └── wrapper
│   ├── gradle-wrapper.jar
│   └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── local.properties
└── settings.gradle

如果你也想要打印类似于上面的目录结构树, 那么我们可以安装一个tree程序,

如果是Mac平台 那么直接使用brew工具进行安装:

1
brew install tree

安装完毕后 在你只需要打印结构树的目录下输入tree即可

Tree的常用技巧

  1. 如果想将目录树输出到文本, 我们可以:

    1
    tree >README.md
  2. 如果我们指定打印层级数, 那么可以:

    1
    tree -L 层级数量
  3. 如果我们只想打印文件夹

    1
    tree -d
  4. 如果我们想滤除掉某个文件夹

    1
    tree -I 文件夹名称

本文为作者原创转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

使用Android Studio进行C/C++的开发

发表于 2022-09-17

前言

作为一名专业Android开发者, 当我们遇到需要C/C++的开发时, 完全可以直接使用Android Studio, 而不用另外下载诸如CLion AppCode等收费IDE

使用Android Studio的好处有:

  • 免费: JetBrains的软件大部分都是收费的 唯独Android Studio 完全免费使用
  • Gradle天然支持C语言的编译: Gradle不仅可以编译Groovy Java和Kotlin, 还可以编译C/C++ 、Scala和Swift, 未来还会支持更多语言, 潜力无限
  • 节省电脑资源: 无需装多个IDE, 一个Android Studio就可以搞定Android Web和C的开发 你说爽不爽

说了这么多好处, 接来了咱们来聊聊如何实现Android Studio的C/C++开发

实现步骤

  1. 创建一个空工程, 默认选择Android空Activity工程即可, 然后将一些用不上的文件都清除, 最后目录结构如下:

    1
    2
    3
    4
    5
    6
    .
    |-- build.gradle
    `-- src
    `-- main
    `-- c
    `-- hello.c

    如果是C++开发, 那么目录名改成cpp, 其结构如下:

    1
    2
    3
    4
    5
    6
    .
    |-- build.gradle
    `-- src
    `-- main
    `-- cpp
    `-- hello.cpp
  2. 在App目录下的build.gradle中的内容全部清除 然后填入以下内容:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    apply plugin: 'c'

    model {
    components {
    main(NativeExecutableSpec) {
    }
    }
    }

    dependencies {

    }

    同样的 如果是C++, 则将plugin改成cpp, 如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    apply plugin: 'cpp'

    model {
    components {
    main(NativeExecutableSpec) {
    }
    }
    }

    dependencies {

    }
  3. gradle同步之后, 右侧gradle task面板中会生成三个task:

    image-20220916122044974

  4. 此时我们尝试编写C代码

    1
    2
    3
    4
    5
    6
    #include <stdio.h>

    int main(int argc, char** argv){
    printf("Hello World!\n");
    return 0;
    }
  5. 编写完后 运行gradle task中的build, 就会自动对源码进行编译并生成可执行文件, 该文件我们可以在build目录中找到

    image-20220916122359799

  6. 打开文件 双击运行, 此时控台输出Hello World

    image-20220916122515283

构建执行流程优化

  1. 编译结束后自动执行程序

    修改build.gradle文件内容如下即可:

    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
    apply plugin: 'c'

    model {
    components {
    main(NativeExecutableSpec) {
    println("开始编译...")

    }
    }
    }
    task execProgram(){
    doLast {
    println("开始执行...")
    exec {
    commandLine("./build/exe/main/main")
    }
    }

    }

    build.finalizedBy(execProgram)

    dependencies {

    }

    这样, 点击build任务之后就会自动执行程序了, 如果只想重复执行程序 不进行重新编译, 那么单独执行execProgram任务即可:

    image-20220916181048724

增加代码错误提示功能

虽然c/c++程序可以正常编译执行了, 但是代码在编写过程中并没有语法错误提示, 在这种环境下写代码的体验会比较差

接下来 我们把该功能实现, 这里需要配合android插件以及cmake构建工具:

  1. 下载NDK和cmake工具

    image-20220928141059262

    image-20220928141148055

  2. 配置build.gradle

    增加如下内容:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    apply plugin: 'com.android.application'
    android{
    compileSdkVersion 30
    externalNativeBuild {
    cmake {
    path "CMakeLists.txt"
    }
    }
    defaultConfig {
    //需要限制最小库版本不能太低 不然有些c库可能缺失
    minSdkVersion 21
    targetSdkVersion 30

    }
    }
  3. 在build.gradle同级目录下创建CMakeLists.txt文件

    并添加以下内容:

    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
    # 限定cmake最小版本号 当前使用的版本必须在这个之上
    cmake_minimum_required(VERSION 3.10.2)

    # 描述工程名称
    project("cproject")

    # 自定义变量 使用${变量名}进行引用
    set(BINARY_NAME "android-lib")
    set(EXEC_NAME "androidexc")


    #获取指定目录下源文件列表,保存到 `DIR_SRCS` 变量中
    aux_source_directory(${PROJECT_SOURCE_DIR}/src/main/c DIR_SRCS)

    # 生成可执行文件
    add_executable(${EXEC_NAME} ${DIR_SRCS})

    # 生成动态链接库
    add_library( # 动态库名称
    ${BINARY_NAME}

    # 生成动态库
    SHARED

    # 被编译进入库中的源码文件
    ${DIR_SRCS})
  4. 在main目录下创建AndroidManifest.xml文件

    并添加以下内容, 包名自定义:

    1
    2
    3
    4
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="自定义包名">
    </manifest>
  5. 同步工程

    同步刷新gradle工程后, 此时我们发现c目录下的源码可以语法错误提示了, 并且代码自动补全功能也有了

    image-20220928170120305

实现交叉编译

经过上面如此一番配置之后, 相当于结合了gradle和cmake两大构建工具,可以说是强大无比

我们既可以使用gradle执行execProgram任务生成本地平台的可执行文件, 同时还可以使用cmake交叉编译生成android平台的执行文件和动态库文件

我们只需编译工程或者执行build任务, 即可自动生成执行文件和动态库, 同时动态库会被gradle工具自动打包进apk文件中

image-20220928171158748

image-20220928171103061

本文为作者原创转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

一个快速实现创意的游戏开发工具,不止适合新手

发表于 2022-09-16

前言

我最近和朋友聊天,越发觉得但凡尝试过自行开发游戏的人,对开发工具应该都有相似的感受:UE4这类引擎上限非常高,但对于编程基础薄弱的人,可能不是第一选择;RPGmaker这一类工具我也用了一段时间,非常好上手,可惜2D画面有些简单。

今天我也想分享一个不错的游戏开发工具,它比较能满足以下人群的需求,文章比较长,大家可以自行判断阅读:

  • 刚刚入门游戏开发的初学者

  • 手头上有个游戏创意,想快速实现的人

  • 希望快速验证游戏玩法和品质的人

    前两天我看到微博上介绍了一个叫罗布乐思(Roblox)的游戏引擎,据说它在全球范围内已经有1亿月活,超过400万的游戏开发者,和超过3000万的作品。

    虽然我猜测那是鹅厂做的一个推广,但还是有点好奇什么工具可以有这么高的月活量,所以试着用了三天,发现它有几个亮点。

引擎非常简单易上手

这个引擎有多容易上手呢?简单到我在没看教程的前提下,就做出了一个游玩时长不到一分钟的横版跳跃小玩法,因为这个游戏大量的预设内容以及简单的脚本语言。

罗布乐思是一个有很多预设模块的3D引擎,比如我在这里展示的城市场景模板。

6c505eea559516304660c4cee93d760d.jpg

除了场景模板,编辑器里还有大量预设好的模型和效果。预设内容大大降低了制作游戏的时间和精力成本,假设你想做一个城市障碍跑酷小游戏,那么只需要打开城市模板,加入各种汽车、楼房甚至形状部件,就可以直接跑起来了。

当然,这些预设内容也是可以修改的,以这辆车为例,右上角的资源管理器显示,你可以控制的部分具体到某个车门、车窗以及乘客座位。再复杂点,你还可以实现对这辆车的加速速度、车轮扭矩、发动机动力等各种效果的控制。

如果你想做更多更复杂的玩法如捏脸、回合制、战棋等等,通过脚本就可以实现,官网的教程里也有对RPG类等级系统、任务线、武器刷新、NPC等各种内容的设置教程,连重生点也只需要单击就可以添加。

罗布乐思这个工具,可以说是把能简化的内容都帮你简化了一遍,非常友好。只要跟着教程走,很快你的游戏想法就能让人们玩儿上了。

并且,这个引擎用的脚本语言是lua。虽然相比起主流如C#,lua比较小众,但事实上它作为一个轻量小巧又五脏俱全的语言,概念简单,学起来是比较容易的。

对这一部分的实现有兴趣,可以到罗布乐思的创作者主页感受一下,在这里泡上一段时间,简单的游戏制作应该难不倒你。(指路https://developer.roblox.com/zh-cn/learn-roblox/all-tutorials)

大量的免费美术资源

在工具箱的“商店”里,有官方提供的大量免费美术资源,涵盖各种内容和类别。如果你在搜索框里输入“hair”,那么搜出来的不止是可以覆盖在部件表面上的超多种毛发材质,还有许多直接可以使用的发型贴图——一个换装小游戏的发型选择界面十分钟内就可以完成了。

老实说,我身边有不止一个朋友表示过,想参加游戏比赛或是做游戏,却因为缺乏美术资源或队友而难以实现。当然这个商店里的美术资源主要满足的是基本需求,胜在可以帮你快速地给自己的游戏套好一个皮,不至于光秃秃的。

对于在画面风格上有所追求的人,我在罗布乐思的中文论坛也看到有人做出过很不错的画面效果。

0ebf37e707b7b2ebb2ae1986777165e5.jpg 这是开发者Joseph155用四个星期时间制作的《23号公寓》,这种画风和光影让我想到了《我的世界》和《模拟人生》。

e2018002457e89692e0244f6649e4c44.jpg

这是我在罗布乐思网站发现的游戏《ROSES》,它的光影在网站里应该算非常优秀的了。按我的理解,这种效果能够通过插件实现,同时选项卡里可以直接管理插件,如此一来美术效果上自然可以有更多的实现空间。

没有服务器成本,还能一键发布多个平台

但我认为这个工具最重要的两个优势,是没有服务器成本——也就是能够零成本做联机游戏,以及一键多平台发布。

由于这款工具的客户端和服务端是集成一体的,这使它不仅能够免费提供服务器,还能够免费负责容灾、运维等一系列网络端工作。

B站上有一位做独立游戏的Up主做了个试玩罗布乐思的视频,他只用一小时就做了个简单跑酷,发布之后,他还直接用PC和iPad登陆不同账号并联机游玩自己的游戏。

(视频指路:https://www.bilibili.com/video/av76363666)

f57037c0d13350ce437145677d844bee.jpg 也就是说,这个一小时做出来的小跑酷已经实现了联机功能,而且Up主并不需要操心服务器问题。这是非常节省人力精力的,以前我还泡在MC某著名私服的时候,运营团队有位负责网络的大神,因为熊孩子太多都被逼得退群两次,更别提搭服务器的成本了。

此外,根据我的理解和官网的说法,罗布乐思上的游戏可以只通过一个按键直接发布在PC、安卓、iOS,甚至是Xbox和VR平台的罗布乐思客户端,然后那些不同系统和设备上的玩家就可以直接玩到你的游戏。当然这应该只是海外的情况,国内如何我不是很确定。

34a991aac186784f75ed3d49b2b43739.jpg 这也体现在测试选框里的一个功能上:点击模拟器就可以看到在不同主流设备上的模拟画面,这应该就是为了便于在各种设备上发布作品而设计的。做完之后直接点击发布,你会得到一个网址,任何人在浏览器上打开这个网址,或是在任何系统与设备的罗布乐思客户端上搜索游戏名,都能玩到这个游戏。

很明显,这完全省去了中间漫长痛苦的各平台打包过程,想想只是把游戏传个Steam就需要多久,还得分成不同的操作系统,移动设备上也没办法玩到——在这里只要点击一下发布。

有了这些已经设计好的功能,剩下的就只是好好把游戏创意实现出来,钻研一个真正好玩的玩法。依赖这款游戏的超高月活,游戏创意与玩法的质量会很容易得到验证。

不过这工具虽然很实用,但在国内很少人知道,网上关于这个游戏的信息也很少。

bd9a253e5c04b243e1afe84cd4842bdc.jpg 所以我自行搜索过不少资料,发现YouTube上的个别Roblox视频能达到7000多万的播放量,社区(指路https://robloxforum.com;https://devforum.roblox.com)活跃程度也很高。

还有18岁高中生通过罗布乐思年收入上百万美元的新闻,这是17年的事儿了。

2b39017fd4866344361ddf595504bb9a.jpg

但是我估计过不了多久,罗布乐思就会在国内变得更有知名度,因为那个所有游戏都躲不过的鹅厂已经找上门来了。很明显,罗布乐思很快就要进入中国市场了。

就看最近的新闻,它们推出了一个北极星计划,准备花3000万扶持创作者,另外还有技术和流量扶持,以及优先出海的名额;最近还有一个征集作品的创意比赛。只是这部分内容比较多,我也不太记得,有兴趣可以去搜一下。

我个人认为,如果大家都认可罗布乐思在开发游戏方面的实用性,接下来鹅厂又能好好做国内落地运营,未来这可能是一个很不错的社区。毕竟鹅厂要用心还是能做点东西出来的。当然,大家有别的想法欢迎留言讨论。

本文转载自: 奶牛关

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

独立游戏开发者必备工具汇总

发表于 2022-09-16

前言

对于独立开发者而言, 使用一些免费且好用的工具相对来说会更加有利, 接下来我们围绕以下几点进行工具的汇总:

  • 开源免费: 不用考虑版权问题 解决后顾之忧
  • 跨平台: 可随时切换平台开发 这个不必多说
  • 工具得好用

工具汇总

  1. Krita

    开源免费的绘画工具, procreate的替代品, 可绘画和制作逐帧动画

    GitHub

    官网

    image-20220915162224967

    image-20220915161819097

  2. Blender

    这个大家都熟悉, 免费开源的三维图形图像软件,提供从建模、动画、材质、渲染、到音频处理、视频剪辑等一系列动画短片制作解决方案

    Github

    官网下载

    image-20211228145312330

  3. Pixelorama

    也是一款强大的像素画绘制工具, 基于Godot引擎的GDScript语言编写, 功能强大 软件跨平台, 可以说是Godot的完美搭档, 我猜想未来可能会将该工具直接集成进Godot内部

    Github

    官网

    image-20220915155142976

    有Web在线版 也可以下载到本地使用:

    image-20220915155311899

  4. Godot

    免费开源的轻量级游戏开发引擎, 麻雀虽小五脏俱全, 支持2D和3D游戏的开发, 内置Tilemap和2D骨骼, 中小型游戏完全胜任

    官网地址

    GitHub地址

    image-20220915162249596

  5. 虚幻引擎

    如果要做大型3D游戏, 那么虚幻必然是首选, 它也是开源软件, 但是并不免费, 收入超过100万美金的部分按照5%来计算交费, 这样一来 对于个人而言 和免费无异

    Github: 这个需要授权才能访问

    点击进入官网

    image-20220915163612724

本文为作者原创转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

使用Git同时将代码推送到多个仓库

发表于 2022-09-16

前言

随着GitHub的制裁, 我开始考虑将一些代码同步推送到国内的一些代码托管厂商, 比如gitee或者codingnet

gitee可以直接对github上的仓库进行克隆和更新, 这一点还是比较方便的, 不过手动同步代码总是麻烦一些, 而且容易遗忘, 所以我们可以考虑在push的时候将代码同时推送到多个仓库

具体实现如下:

具体实现

  1. 首先定义一个仓库地址合集, 名字自定义, 我们将其命名为all

    1
    git remote add all git@github.com:xxx/xxx.git
  2. 然后将需要同时推送的仓库地址追加进入该合集中

    1
    git remote set-url --add all git@gitee.com:xxx/xxx.git
  3. 此时我们输入git remote -v可以查看当前仓库所有地址信息, 如下:

    1
    2
    3
    $all	git@github.com:xxx/xxx.git (fetch)
    $all git@github.com:xxx/xxx.git (push)
    $all git@gitee.com:xxx/xxx.git (push)
  4. 最后推送仓库到远程

    1
    git push all master
  5. 如果你想移除某个仓库合集

    1
    git remote rm all

附加

关于仓库地址的配置我们可以直接在 .git/config 查看,git默认合集名为origin

如果你习惯了输入git push origin master来推送仓库, 那么我们可以直接打开config文件然后在origin合集下追加其他仓库的地址, 如下:

image-20220915173750105

保存后, 我们就可以使用啦

如果你担心文本输入出错, 也可以采用命令行的形式进行地址追加:

1
git remote set-url --add origin git@gitee.com:xxx/xxx.git

本文为作者原创转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

使用netlify部署静态博客网站

发表于 2022-09-15

前言

最近我部署在github上的一个静态网站突然不能访问了, 排查一看原来是github账户被封禁了, 我想有可能是受到了最近俄罗斯制裁的影响, 因为这个账号我当初是用大爬梯注册的, 对方可能以为我是俄罗斯人

问题找到之后 我决定暂时先不注册新Github账号了, 直接换成netlify

netlify有很多优势:

  • 单账号不限制网站数量
  • 可直接从github或者gitlab仓库中拉取代码自动部署
  • 支持HTTPS访问
  • 国内访问速度不比gitpages差

于是我直接将网站静态文件上传到了netlify, 关于部署的具体流程 详见如下:

开始使用

首先登陆netlify网站并登录, 如果你的博客源码放在了Github上, 那么可以直接使用Github账号关联登录

点击进入netlify官网

登录之后会出现以下面板, 我们点击Add new site按钮添加一个新站点:

image-20220915123216935

点击后出现多个选项:

  • import an existing project:表示从Github中的仓库中直接拉取代码
  • start from a template: 表示基于某个模板创建一个新的仓库
  • Deploy manually: 表示手动上传网站静态文件

接下来 我以hexo博客为例, 介绍第一种和第三种的用法

第一种 import an existing project

点击后进入仓库选择页面, 我们可以选择从指定的托管厂商拉取网站源码:

image-20220915121740890

由于我网站源码托管在了Github, 于是我点击Github选项, 进入到仓库选择页面:

image-20220915121922914

选择好后进入网站部署配置页面, 填入我们需要让netlify在拉取我们的仓库后进行的指令操作,hexo g生成静态文件 然后将生成的静态文件上传到netlify:

image-20220915122130743

填好后点击Deploy site, 然后netlify会自动拉取代码并部署网站

紧接着 我们来到网站设置选项卡中配置自定义域名:

image-20220915122650516

需要将自定义域名以CNAME的方式解析到xxxxx.netlify.app, 如果你的域名是阿里云注册的, 直接去阿里云控台配置即可

解析配置完毕后, netlify会自动给网站配置SSL证书实现域名https访问:

image-20220915122938054

此时 我们就可以使用域名正常访问我们的网站啦:

image-20220915123105502

第三种 Deploy manually

这个就比较简单了, 点击后会进入到如下页面:

image-20220915123323777

我们只需将public文件夹拖拽到页面 即可自动上传部署

上传完后回到netlify主页就能看到网站了, 然后进行自定义的域名配置即可正常访问

当然了 如果不用自定义域名 直接使用netlify提供的二级域名也能访问, 这个大家都明白 就不多赘述了

网站测速

以下是国内访问测速图, 总体还不错 :

image-20220915123913425

思考

经过此次账号封禁, 我开始担忧自己存放在Github上的数据安全性问题了, 万一国内开发者收到制裁 Github来个大扫除, 岂不是完蛋, 不过 这对于国内的代码托管厂商而言也许是个难得的机会

所以我接下打算 将重要数据做个多地备份处理

本文为作者原创转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

快速上手免费开源游戏引擎Godot

发表于 2022-09-10

介绍

Godot是一款免费开源的游戏引擎, 其优点如下:

  • 免费开源
  • 体积小 非常轻量 而且功能齐全
  • 跨平台开发 支持Windows Mac Linux Android甚至Web在线开发
  • 脚本语言简单 语法和python类似
  • 游戏跨平台运行
  • 内置脚本编辑器 无需额外安装第三方编辑器

当然 它也有一定的劣势:

  • 对H5的支持不太好 不适合做页游
  • 不支持小程序
  • 2D比较成熟 但3D相对Unity和UE而言弱一些

总之 中小型的游戏开发 完全可以胜任

官网地址

GitHub地址

官方中文文档

快速上手

以下介绍针对有编程语言基础的同学食用

我们知道所谓引擎 其实就是一团封装好的代码而已, 将一些常用且重复的逻辑进行抽取简化 方便开发者调用 从而提升游戏开发的效率

image-20220913144306654

在Godot中 每一个节点就是一个对象, 场景是一个节点 精灵也是一个节点 都是对象(如果你是android开发 我们可以将其看成是布局文件中的控件)

如果我们想在某个类中创建一个对象, 那么直接在该类中创建一个节点, 比如我们想在Main这个类中创建Control对象:

image-20220913144722992

既然是对象, 那么肯定有继承关系 属性和方法, 我们可以从右侧检查器面板中看到继承关系以及本类和父类们的属性 :

image-20220913144543831

而右侧节点面板中的信号列表, 其实就相当于我们平常所说的监听回调:

image-20220913145102898

如果需要查看该对象的方法以及方法说明, 我们可以直接在检查器面板中打开随时查看:

image-20220913145406023

Godot进阶

  1. 使用场景自动加载的形式创建单例

    image-20220914113325298

常用快捷键

  1. 添加节点

    1
    ctrl+A
  2. 全局搜索

    1
    ctrl+shift+F
  3. 复制物体

    1
    ctrl+D
  4. 播放动画

    1
    shift+D
  5. 停止动画

    1
    S

游戏导出

以导出Android包为例, 首先需要在编辑器设置中指定好SDK和签名路径:

image-20220914114349233

签名可以用以下指令生成:

1
keytool -keyalg RSA -genkeypair -alias 用户名 -keypass 密码 -keystore debug.keystore -storepass 密码 -dname "CN=Android Debug,O=Android,C=US" -validity 9999 -deststoretype pkcs12

紧接着进入导出界面, 选择Android, 然后提示模板缺失, 此时我们点击管理模板:

image-20220914114704962

然后点击下载模板:

image-20220914114745522

这个模板文件 包含了所有支持平台的基础框架包:

image-20220914115341762

此时 我们再次进入导出面板, 配置签名后点击导出项目就可以了:

image-20220914115952330

其他平台导出方法可参考官方文档, 当然还有贴吧小伙伴的经验贴可参考:

跨平台导出参考

本文为作者原创转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

JS读取本地json文件的方法汇总

发表于 2022-09-05

前言

对于单纯的静态网站而言, 我们有时候可能会直接将json数据放在本地, 此时涉及到json文件内容读取的问题

假设html同级目录下有一个名为data.json的文件, 读取的方式有:

第一种 使用ajax

1
2
3
4
5
6
7
8
9
$.ajax({
url: "data.json",//同文件夹下的json文件路径
type: "GET",//请求方式为get
dataType: "json", //返回数据格式为json
success: function (data) {//请求成功完成后要执行的方法
console.log(data);
}

})

第二种 getJson

1
2
3
$.getJSON("data.json", function (data) {
console.log(data)
});

第三种 使用原生XMLHttpRequest

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

var url = "data.json"
// 申明一个XMLHttpRequest
var request = new XMLHttpRequest();
// 设置请求方法与路径
request.open("get", url);
// 不发送数据到服务器
request.send(null);
//XHR对象获取到返回信息后执行
request.onload = function () {
// 解析获取到的数据
var data = JSON.parse(request.responseText);
console.log(data)

}

跨域问题

我们在进行本地代码测试的时候, 如果以双击的形式打开html, 会出现跨域问题, 浏览器控台报错如下:

1
Access to XMLHttpRequest at 'file:///Users/songjian/Desktop/data.json' from origin 'null' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, chrome-untrusted, https, isolated-app

解决方法有两种:

  1. 第一种是给网页添加一个域名, 比如localhost, 我们可以使用python或者nodejs在本地启动一个服务, 这里以python3为例:

    1
    python -m http.server 8000

    启动服务后, 浏览器输入localhost:8000, 即可正常获取到本地json数据

  2. 第二种是修改本地浏览器设置, 以Windows平台谷歌浏览器为例, 启动时添加参数--allow-file-access-from-files

    20201223114910

本文为作者原创转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

acme.sh证书自动部署教程

发表于 2022-09-02

前言

本页面介绍了 ACME.sh 结合 CertCloud 的部署流程。

在开始之前需要完成 证书ACME自动部署 页面的前两个步骤。

创建 ACME 目录 URL

  1. 登录 CertCloud 账户,点击【自动化】->【ACME】->【添加 ACME 目录 URL】 ACME URL 生成操作步骤
  2. 在弹出框中输入具有标识性的名称,选择证书来源[订单,产品],选择相应的订单或产品 组织 ,点击【添加】按钮。ACME 界面会新增一条记录。
  3. ACME 界面会新增一条记录 ,点击对应记录的 【部署】 按钮,在跳转的页面选择 acme.sh,点击复制图标复制 acme.sh 部署命令 。

当前,CertCloud ACME 仅支持 OV 和 EV TLS / SSL 证书。
如果需要查看详细的 ACME URL ,则只需要点击对应数据的“ 部署 ”按钮,就可以看到详细的 ACME URL 信息。

安装

官网:ACME.sh GitHub项目地址

1
curl  https://get.acme.sh | sh

普通用户和 root 用户都可以安装使用。

安装过程:

  1. 默认安装 acme.sh 到你的 home 目录下:
1
#cd ~/.acme.sh/

为了方便使用 acme.sh,可以创建 一个 bash 的 alias:

1
alias acme.sh=~/.acme.sh/acme.sh

颁发并安装证书

  1. 通过 SSH 连接到安装有 ACME 客户端的 Web 服务器。
  2. 在终端提示符下,使用 ACME.sh 客户端命令执行上述复制的颁发命令请求证书。ACME.sh 客户端颁发、安装以及重颁发示例:
1
2
3
4
5
6
7
8
# 获取
sudo acme.sh --issue -d DOMAIN --dns DNS_TYPE --server YOUR-ACME-URL --days DAYS

# 安装
sudo acme.sh --installcert -d DOMAIN --key-file YOUR-KEY.pem --fullchain-file YOUR-CERT.pem --reloadcmd "YOUR-SERVER-RELOAD"

# 获取并安装(以上两条命令合在一起)
sudo acme.sh --issue -d DOMAIN --dns DNS_TYPE --server YOUR-ACME-URL --days DAYS && sudo acme.sh --installcert -d DOMAIN --key-file YOUR-KEY.pem --fullchain-file YOUR-CERT.pem --reloadcmd "YOUR-SERVER-RELOAD"
  • DOMAIN 需要替换为申请时提交的域名信息,可以为多个。
  • DNS_TYPE 为需要验证的域名的 DNS 的类型,不同的类型需要配置不同的环境变量。(预审核通过的可以直接配置为 dns_dp ,不需要配置密钥信息)
  • DAYS 为申请的证书的请求周期,应比当前订单的密钥轮换周期时间小。
  • YOUR-ACME-URL 为先前创建的 ACME 目录 URL (请参阅 创建 ACME 目录 URL)。
  • YOUR-KEY.pem 表示服务配置的证书私钥的路径地址信息。
  • YOUR-CERT.pem 表示服务配置的证书文件的路径地址信息。
  • YOUR-SERVER-RELOAD 表示服务重载服务的命令。(具体的实例,可以看下方的 ACME.sh 部分常用命令)

注:可以根据自己的需要和服务器环境自定义 ACME 客户端执行命令。

ACME返回的错误和错误消息与 CertCloud API 中返回的错误和错误消息相同。有关错误代码及其含义的列表,请参见 Open API 错误。

完成后,终端将显示一条成功消息
恭喜你!ACME 证书请求已完成,并且新发行的证书已安装(保存)在 Web 服务器上。可以访问网站以确认安装成功。

常用命令

为了更方便使用,提供了部分 ACME.sh 的常用命令。

字段信息 解释
- -issue 签发请求
- -days [days] 请求签发证书的周期,配合 –issue 使用
- -server [ACME 目录 URL] 证书服务商的 ACME 目录 URL,配合 –issue 使用
- -installcert 安装证书
-d [网站域名] 配置证书的域名信息
- -webroot [网站跟文件路径] 文件验证需要的网站跟文件路径
- -dns [DNS类型] 配置验证域名的DNS信息
- -cert-file [证书保存的路径] 安装证书保存的路径
- -key-file [私钥保存的路径] 安装私钥保存的路径
- -fullchain-file [证书链保存的路径] 安装证书链保存的路径
- -reloadcmd [Web 重载命令] 安装证书完成之后Web服务的重载命令
  1. 文件验证

    1
    acme.sh  --issue  -d mydomain.com -d www.mydomain.com  --webroot  /home/wwwroot/mydomain.com/ --server https://acme.certcloud.cn/acme/directory/XXX
  2. DNS 验证( 以 DNSPod ,阿里 DNS 为例)

    1
    2
    3
    4
    5
    6
    7
    export DP_Id="XXX"
    export DP_Key="XXX"
    acme.sh --issue --dns dns_dp -d aa.com -d www.aa.com --server https://acme.certcloud.cn/acme/directory/XXX

    export Ali_Key="XXX"
    export Ali_Secret="XXX"
    acme.sh --issue --dns dns_ali -d example.com -d www.example.com --server https://acme.certcloud.cn/acme/directory/XXX

    更多支持的DNS类型详见 [ACME.sh 支持的 DNS 类型大全]

  3. 证书部署:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Nginx example:

    acme.sh --installcert -d example.com --server https://acme.certcloud.cn/acme/directory/XXX \
    --key-file /path/to/keyfile/in/nginx/key.pem \
    --fullchain-file /path/to/fullchain/nginx/cert.pem \
    --reloadcmd "service nginx force-reload"

    Apache example:

    acme.sh --installcert -d example.com --server https://acme.certcloud.cn/acme/directory/XXX \
    --cert-file /path/to/certfile/in/apache/cert.pem \
    --key-file /path/to/keyfile/in/apache/key.pem \
    --fullchain-file /path/to/fullchain/certfile/apache/fullchain.pem \
    --reloadcmd "service apache2 force-reload"
  4. 获取并部署

    1
    2
    3
    4
    5
    acme.sh --issue -d example.com -d www.example.com --dns dns_dp --server https://acme.certcloud.cn/acme/directory/XXX --days 30 
    && acme.sh --installcert -d example.com -d www.example.com \
    --key-file /etc/nginx/conf.d/example.com.key \
    --fullchain-file /etc/nginx/conf.d/example.com.cer \
    --reloadcmd "service nginx force-reload"

    days 的周期为 30 天,acme.sh 会每 30 天去请求 server 去获取新的证书,并进行安装。

本文转载自: https://docs.certcloud.cn/docs/installation/auto/acme/acmesh/

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

使用ACME搭配freessl网站实现免费https证书的生成和更新

发表于 2022-09-02

背景

最近在使用netlify的静态网站托管服务, 如果需要自定义域名的话 需要提供https证书, 如下图:

image-20220902113147959

SSL证书介绍

是一种配置在服务器上的数字证书, 由可信的数字证书颁发机构(CA)颁发, 类似于我们的驾驶证, 它具有服务器身份验证和数据传输加密功能。

证书实际上就是几串字符密钥 以文本的形式存放在诸如.key .cer .csr 结尾的文件中:

image-20220902121037323

文件介绍:

  • .key文件: 证书私钥
  • .cer文件: certificate的缩写,这就是数字证书
  • .csr文件:certificate signing request的缩写 证书签名请求文件,含有公钥信息

这些文件需要存放在服务器中, 当浏览器通过域名对服务器进行访问时, 可获取服务器中的证书, 证书中含有公钥

那么浏览器和服务器 一个持有私钥一个持有公钥 进行加密会话 保证数据安全

自制SSL证书

既然所谓的证书就是RSA密钥, 那我们自然可以自己生成, 比如:

在线生成SSL证书

image-20220902142026451

但是这种自己颁发的证书是不被浏览器认可的, 就好比自己给自己手写一张驾驶证, 完全没有任何法律效力

因此我们只能向CA机构申请证书, 国际知名的CA机构有GeoTrust、Comodo、DigiCert、Sectigo、Thawte、GlobalSign、Symantec、AlphaSSL等

大部分都是收费的, 那么我们要用免费的话, 可以退而求其次,freessl这个平台是个不错的选择

freessl.cn

该网站免费提供由Let's Encrypt 与 TrustAsia两家CA机构颁发的SSL证书, 我们注册后即可免费申请, 但是证书有效期只有三个月, 到期后需要重新申请

为了解决自动续期的问题 我们需要用到一个工具, 那就是acme.sh

ACME.SH

acme.sh是一个数字证书管理工具, 利用它我们可以:

  • 辅助申请SSL证书文件到本地
  • 内置定时程序 到期自动申请证书
  • 安装证书到指定目录

GitHub地址

工具使用
  1. 工具安装

    1
    2
    3
    $ git clone https://github.com/acmesh-official/acme.sh.git
    $ cd ./acme.sh
    $ ./acme.sh --install -m my@example.com
  2. 证书申请

    1
    acme.sh --issue -d 域名 -w 证书存放目录

    acme.sh 默认会从zerossl获取证书, zerossl和freessl.cn一样, 也是一个证书中介网站 ,zerossl提供由Let's Encrypt 颁发的数字证书, 每个注册账户可以申请三个免费证书

    image-20220902150909721

    但是 由于免费的数量有限 所以我们不选择从zerossl获取

    如果只是临时测试用的话 可以用一用 直接在官网申请并下载证书zip包即可:

    image-20220902151803041

    image-20220902152401511

    考虑到长期使用, 因此我们选择freessl.cn

  3. 从freessl.cn获取证书

    freessl支持acme自动化

    在网站输入域名并且进行校验后会生成一个acme地址, 这个地址相当于账号凭证, 利用这个它我们可以借助acme.sh快速获取证书:

    image-20220902152759063

    具体指令如下:

    1
    acme.sh --issue -d 域名  --dns dns_dp --server 你的acme地址

    执行后自动将证书下载到本地:

    image-20220902113332949

    最后我们将证书密钥拷贝至托管服务器中, 这里以netlify为例:

    image-20220902154250607

    填写完后点击安装, 证书成功识别

    image-20220902113754771

    此时 我们即可通过自定义域名访问netlify中的静态网站了, 在浏览器中可以查看当前获取到的证书信息:

    image-20220902141040045

关于自动更新

通常我们会将acme.sh安装至服务器中, 然后实现证书的自动更新, 由于我这边使用的是netlify, 所以三个月到期后需要手动执行一下代码

更多关于acme.sh自动化的用法, 可以参见《acme.sh证书自动部署教程》

其他可以获取免费SSL证书的网站

  • OHTTPS: https://ohttps.com/

本文为作者原创转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

1…121314…50

乱码三千

android程序员一枚,擅长java,kotlin,python,金融投资,欢迎交流~

491 日志
143 标签
RSS
© 2025 乱码三千
本站总访问量次
由 Hexo 强力驱动
|
主题 — NexT.Muse v5.1.4
0%