写点什么

深度解析:智能合约 DAPP(bsc)币安链系统项目开发解决方案

作者:飞机@StPv888
  • 2022-10-14
    广东
  • 本文字数:5847 字

    阅读完需:约 19 分钟

深度解析:智能合约DAPP(bsc)币安链系统项目开发解决方案

解释许多区块链 DAPP 的逻辑方案,但什么是 DAPP?

DAPP 的全称是去中心化应用, 去中心化的应用在业界被称为去中心化,这是一种基于区块链底层技术的新型应用模式。DAPP 类似于区块链技术 APP 和 Android 系统,是基于底层系统开发的衍生产品。


一、JDK 环境搭建


1.什么是 JDK


2.如何下载 JDK


3.配置 JDK 环境


二、用命令行工具搭建安卓环境


1.下载命令行工具,及其使用


2.通过命令行工具下载 cmdline-tools;latest


3.通过命令行工具下载安卓 SDK


4.通过命令行工具下载仿真镜像及模拟器


5.设置 GRADLE_USER_HOME


三、vscode 配置


1.安装 Android for VS Code 插件


2.添加 vscode 任务,嵌入安卓命令行


3.添加任务快捷键


4.添加 vscode 的调试选项,利用安卓命令行任务


5.利用真机调试 app


6.利用模拟器调试 app


四、扩展知识


一、JDK 环境搭建


1.什么是 JDK


Java Development Kit(Java 开发工具包)的缩写。用于 java 程序的开发,提供给程序员使用。和 JDK 有个比较接近的名词叫做 JRE,JRE 的全称是 Java Runtime Environment,JRE 是 java 程序运行时需要提供的运行时环境,很显然 JDK 会包含 JRE。对于不需要开发 java 程序(APP 或者前端后台服务器等),而是只需要提供 java 程序运行环境的只要有 JRE 就可以了。而对于需要开发 java 的我们来说,电脑环境中必须有 JDK 环境才能进行开发。


2.如何下载 JDK


从 Oracle 的官网下,网址是https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html下载对应的版本,但是个人觉得这个比较慢,而且还要注册账户登录


从别人分享的阿里云下载链接下载,网址是https://blog.csdn.net/xinquanv1/article/details/106304339,需要选择对应的版本下载,我这边对应选择的下载地址是https://code.aliyun.com/kar/oracle-jdk/raw/3c932f02aa11e79dc39e4a68f5b0483ec1d32abe/jdk-8u251-windows-x64.exe


3.配置 JDK 环境


把下载下来的 jdk-8u251-windows-x64.exe 进行安装,这里建议把所有安卓开发的软件都安装在同一个目录下面,这样可以方便处理,我这边安装目录是 E:android


对 Windows 的环境变量进行如下设置,添加环境变量


添加环境变量 CLASSPATH 赋值.;%JAVA_HOME%libdt.jar;%JAVA_HOME%libtools.jar;


添加环境变量 JAVA_HOME 赋值 E:androidjdk1.8.0_251


添加环境变量 path 增加 %JAVA_HOME%bin;%JAVA_HOME%jrebin


class path


java home


java path


打开 cmd 终端,并输入


java-version


,最后显示如下图,则代表 JDK 环境设置完成


java ver


二、用命令行工具搭建安卓环境


1.下载命令行工具,及其使用


我们从安卓开发者的官网上下载命令行工具,网址是https://developer.android.google.cn/studio?hl=zh-cn打卡网页后,不用管 Android Studio 相关的下载,直接往下拉,拉到最底下。然后再向上稍微滚动几下,看到如下界面,选择相应的系统下载即可


cmdline


接着解压下载的压缩文件,并把里面的 tools 解压到安卓软件相关的目录下,我这边是 E:androidsdk


把解压之后的目录添加到环境变量 path 中,添加 E:androidsdktools 和 E:androidsdktoolsbin


tools path


重新打开一个新的 cmd 终端,输入


sdkmanager--list


会显示出你已经安装的包,和其他没有安装的包,如下图所示,其中的 Installed packages 是已经安装的包列表,而 Available Packages 是未安装的包列表,不是说所有包都必须安装,安装我们需要的包即可


sdk list


2.通过命令行工具下载基础工具包


使用


sdkmanager--list


输出可以安装的包,我们找到 cmdline-tools,我们这里安装最新的版本 latest。找到 platform-tools 并进行安装。这里的 cmdline-tools 其实就是我们下载的命令行工具,只是为了符合 sdk 的路径添加的 path。而 platform-tools 则是我们 app 调试需要用到的工具,比如 adb、fastboot 等


cmdline


platform tools


通过


sdkmanager--install cmdline-tools;latest platform-tools


添加环境变量 E:androidsdkcmdline-toolslatestbin 和 E:androidsdkplatform-tools 到 path


3.通过命令行工具下载安卓 SDK


确定我们需要开发的 api 级别,不同的 api 对应不同的系统版本,具体可以参考https://developer.android.google.cn/guide/topics/manifest/uses-sdk-element?hl=zh-cn我们这里用 API 级别为 28 的 sdk


使用


sdkmanager--list


输出可以安装的包,我们找到 build-tools;28.0.3 和 platforms;android-28,build-tools;28.0.3 是编译时对应的编译工具,platforms;android-28 主要是系统的 jar 包,


build


platform


通过


sdkmanager--install build-tools;28.0.3 platforms;android-28


4.通过命令行工具下载仿真镜像及模拟器


使用


sdkmanager--list


输出可以安装的包,我们找到 emulator 和 system-images;android-28;google_apis_playstore;x86_64,emulator 是模拟器,而 system-images;android-28;google_apis_playstore;x86_64 则是系统的镜像文件,镜像可以随意,只要是支持 android-28 的就可以


emulator


image


通过


sdkmanager--install emulator system-images;android-28;google_apis_playstore;x86_64


5.设置 GRADLE_USER_HOME


这里我们为什么要 GRADLE_USER_HOME,其实这个就算不设置也是可以的没有什么问题,因为会默认在用户目录下创建一个.gradle 文件夹由于存放 gradle 的各个版本,比如 C:UsersAdministrator.gradle,但是这样会有两点不好,1、切换用户时需要重新下载更新。2、时间长了,版本多了会占用 c 盘存储,所以我设置了环境变量 GRADLE_USER_HOME,并赋值为 E:androidgradlepro,这样就好了


gradle


最后 sdk 的目录也完成了,如下


adir


三、vscode 配置


1.安装 Android for VS Code 插件


点击扩展按钮或者通过 crtl+shift+x 快捷键进入插件搜索界面,输入 android 回车搜索,一会就会出现如下图所示界面,点击边上的安装按钮进行安装,安装好后,安装按钮会消失


Android for VS Code


创建原生的 app 目录架构,这个我们可以直接从一个原生的架构修改,这里为了演示方便直接从码云 clone 了他的原生 app 下来


git clone/oschina/git-osc-android.git


2.添加 vscode 任务,嵌入安卓命令行


通过快捷键 F1,弹出下图所示界面,选择配置生成默认任务,选择创建 task.json,再选择 other 其他


f1


taskorg


编辑 task.json 为如下内容,注意修改相关命令的路径,下面的模板是直接在原生 APP 的顶层目录即 gradle 的脚本文件夹层


{


//See https://go.microsoft.com/fwlink/?LinkId=733558


//for the documentation about the tasks.json format


"version":"2.0.0",


"tasks":[


{


"label":"AppSignKey",


"type":"shell",


"command":"keytool-genkey-v-keystore my-release-key.jks-keyalg RSA-keysize 2048-validity 10000-alias my-alias",


"windows":{


//"command":"${workspaceRoot}\shell.bat first"


"command":"cd gitoscandroid;del my-release-key.jks;keytool-genkey-v-keystore my-release-key.jks-keyalg RSA-keysize 2048-validity 10000-alias my-alias"


//keytool-genkey-v-keystore release.keystore-storepass android-alias androiddebugkey-keypass android-keyalg RSA-keysize 2048-validity 10000


//keytool-genkey-v-keystore debug.keystore-storepass android-alias androiddebugkey-keypass android-keyalg RSA-keysize 2048-validity 10000


},


"group":"test",


"presentation":{


"reveal":"always",


//"panel":"new"


}


},


{


"label":"CleanApp",


"type":"shell",


"command":"${workspaceRoot}/gradlew clean",


"windows":{


//"command":"${workspaceRoot}\shell.bat first"


"command":"${workspaceRoot}\gradlew.bat clean"


},


"group":"test",


"presentation":{


"reveal":"always",


//"panel":"new"


}


},


{


"label":"BuildDebugApp",


"type":"shell",


"command":"${workspaceRoot}/gradlew assembleDebug",


"windows":{


//"command":"${workspaceRoot}\shell.bat first"


"command":"${workspaceRoot}\gradlew.bat assembleDebug"


},


"group":"test",


"presentation":{


"reveal":"always",


//"panel":"new"


}


},


{


"label":"InstallDebugApp",


"type":"shell",


"command":"${workspaceRoot}/gradlew installDebug",


"windows":{


"command":"${workspaceRoot}\gradlew.bat installDebug"


},


"group":"test",


"presentation":{


"reveal":"always",


//"panel":"new"


}


},


{


"label":"InstallReleaseApp",


"type":"shell",


"command":"${workspaceRoot}/gradlew installRelease",


"windows":{


"command":"${workspaceRoot}\gradlew.bat installRelease"


},


"group":"test",


"presentation":{


"reveal":"always",


//"panel":"new"


}


},


]


}


上面的 task 列表说明


AppSignKey 通过命令行生成签名文件


CleanApp 通过命令行清除生成目录


BuildDebugApp 通过命令行编译调试 APP


InstallDebugApp 通过命令行把调试 APP 安装到手机或虚拟机


InstallReleaseApp 通过命令行安装签名后的发布 APP


在 vscode 中测试我们创建的 task 任务是否正常,按 F1 并输入 task,选择“运行测试任务”,后面会弹出我们创建的任务列表,选择其中的 AppSignKey 任务测试是否正常,该任务会在项目根目录下生成一个叫 my-release-key.jks 的秘钥文件,而其 alias 是 my-alias,这是在 AppSignKey 定死的,小伙伴也可以自行修改相关的参数。这里要注意在生成秘钥文件时需要输入相关信息和密码,我们这里需要把密码记录下来,比如我这里把两个密码都设置为 vencol123,后面生成签名 APP 的时候需要用到


task list


接着我们选择 BuildDebugApp 任务,可能出现的问题


通过 jcenter 下载文件失败,这里需要把 jcenter()修改成


maven{url'https://maven.aliyun.com/repository/jcenter'}


//maven{url'http://maven.aliyun.com/nexus/content/groups/public'}


local.properties 文件找不到,这是因为码云用 local.properties 控制某些项目在本地而不提交到服务器,这里我们只要新建一个 local.properties 文件,并输入如下内容


RELEASE_STORE_FILE="my-release-key.jks"


RELEASE_STORE_PASSWORD=vencol123


RELEASE_KEY_ALIAS=my-alias


RELEASE_KEY_PASSWORD=vencol123


Keystore file"my-release-key.jks"not found for signing config'release'.,修改 app 目录下的 build.gradle 文件,把 signingConfigs 里面配置的 storeFile file(propertyStoreFileStr)替换成 storeFile file("my-release-key.jks")。my-release-key.jks 这个和 build.gradle 在同一层目录下


3.添加任务快捷键


我们签名已经熟练使用了 F1---》运行 task---》选择我们建立的 task 的方式运行任务了,这里我们介绍一种设置 vscode 快捷键的方式调用任务


我们按下 F1,接着输入 key,接着弹出如下界面,我们在这里选择 open keyboard shortcuts(json)的选项,接着弹出 keybinding.json 文件


key


在 keybinding.json 文件中,添加如下内容


{


"key":"F6",


"command":"workbench.action.tasks.runTask",


"args":"InstallReleaseApp"


},


{


"key":"F7",


"command":"workbench.action.tasks.runTask",


"args":"BuildDebugApp"


},


{


"key":"F8",


"command":"workbench.action.tasks.runTask",


"args":"CleanApp"


},


{


"key":"F9",


"command":"workbench.action.tasks.runTask",


"args":"AppSignKey"


},


添加的快捷键为 F6 到 F9,对应关系如下


F6--->InstallReleaseApp,安装发布版本的 APP 到手机,需要先生成秘钥


F7--->BuildDebugApp,编译调试版本的 APP


F6--->CleanApp,清除 APP 的编译信息


F6--->AppSignKey,生成秘钥


4.添加 vscode 的调试选项,利用安卓命令行任务


在安装了 Android for VS Code 插件的前提下,通过运行---》添加配置选项---》android,弹出 launch.json 文件


add config


修改 launch.json 文件,修改相应的目录,内容如下所示,注意这里添加"preLaunchTask":"InstallDebugApp",意思是在执行 Android launch 之前,先安装 app


{


//使用 IntelliSense 了解相关属性。


//悬停以查看现有属性的描述。


//欲了解更多信息,请访问:https://go.microsoft.com/fwlink/?linkid=830387


"version":"0.2.0",


"configurations":[


{


"type":"android",


"request":"launch",


"name":"Android launch",


"appSrcRoot":"${workspaceRoot}/gitoscandroid/src/main",


"apkFile":"${workspaceRoot}/gitoscandroid/build/outputs/apk/debug/app-debug.apk",


"adbPort":5037,


"preLaunchTask":"InstallDebugApp"


},


{


"type":"android",


"request":"attach",


"name":"Android attach",


"appSrcRoot":"${workspaceRoot}/gitoscandroid/src/main",


"adbPort":5037,


"processId":"${command:PickAndroidProcess}"


}


]


}


5.利用真机调试 app


请确保已经安装了 adb 驱动,以及手机已经打开了 adb 调试功能。驱动安装正常,设备管理器中会出现类似的设备信息,adb interface。如果没有可以通过驱动精灵等安装,也可以下载/的通用 adb 驱动进行安装


adb


分析 AndroidManifest.xml 可知,码云 APP 的首页是 WelcomePage,这里我们找到 WelcomePage 的源码,及在其启动的时候打上调试断点,看下是否能断点调试,选择 Android launch,按下 F5 选择进行调试如下图所示


debug


app 已经正常启动了,但是为什么没有进入我们的调试断点?这个经查找发现,码云的大佬开发是直接把 debug 的配置配置成 release 配置的,也就是 debug 和 release 是一样的没有调试信息在 app 里面,因为无法在线调试,下面是其 build.gradle 的信息


nodebug


可能出现问题,是因为 APP 的目录设置有问题,请具体修改


Launch failed:APK read error.ENOENT:no such file or directory,open'Gbuildoutputsapkdebugapp-debug.apk'


6.利用模拟器调试 app


如果没有虚拟镜像,这里首先需要通过命令行创建一个镜像


avdmanager create avd-n base-k"system-images;android-28;google_apis_playstore;x86_64-p"E:androidavd"-c 1000M


参数-n,表示的是创建后 avd 镜像的名称


参数-k,表示的是用于创建的基础镜像,这个选择我们之前下载的镜像


参数-p,表示 avd 镜像放置的目录


参数-c,表示的是创建 avd 镜像系统的大小


创建好镜像后,可以通过使用 emulator 的方式对镜像进行启动测试,其中 avd 参数后面输入的是 avd 镜像的名字,如无意外就可以正常启动模拟器了


emulator-avd base


avd


接着我们到 vscode 代码目录下,按下 F5,如果没有连接手机也没有启动的模拟器,需要先启动模拟器


emulator


可能出现问题


'gitoscandroid:debug':Could not find build of variant which supports density 160 and an ABI in x86_64,x86


,是因为在 build.gradle,没有配置对 x86 的支持,这里我们直接添加即可


abiFilters'armeabi-v7a','x86'


四、扩展知识


这里介绍下 vscode 还可以通过 react-native 混合开发原生的 APP 和移动 APP,对应的 android 目录下可以放置安卓原生的工程文件,但是要修改 build.gradle 文件支持 react-native 插件。但是有个奇怪的问题,在 vscode 里面通过 react-native 调试 APP 的时候,似乎必须要把 mainactive 设置为顶层界面才可以调试

用户头像

还未添加个人签名 2022-05-13 加入

还未添加个人简介

评论

发布
暂无评论
深度解析:智能合约DAPP(bsc)币安链系统项目开发解决方案_飞机@StPv888_InfoQ写作社区