开篇,初识 Compose,永久激活 IntelliJ IDEA
这是 dhl 的第 31 篇原创文章
Jetpack Compose 是 Android UI 的现代工具包,简化了 Android 上 UI 的开发。你无需编辑任何 XML 布局,使用声明性函数即可构建一个简单的 UI 组件,UI 构建工作将由 Compose 编译器完成。通过更少的代码、强大的工具和直观的 Kotlin api,加速 Android 上 UI 的开发——来自官网。
Compose 是用 Kotlin 编写的 UI 工具包,JetBrains 基于 Google 提供的 Compose 开发了 Compose for Desktop 简化了桌面应用程序 UI 的开发,因此 Android 和 桌面应用程序之间大部分 UI 代码是共享的。也就是说在 Android 上使用的部分 UI 组件,同样也适用于桌面应用程序 UI 开发,降低了学习成本,在后文中会有详细的演示案例。
在 Compose for Desktop 之前也提供了 JavaFX 、Java Swing 等等,都是为 Java 设计的 UI 工具包。
之前我用 JavaFX 开发过 Win 和 Mac 桌面应用程序,最近我也打算用 Compose for Desktop 重写之前开发的桌面应用程序,后面会出一系列文章。
如何将程序打包成可安装的桌面应用程序,提供给使用者在 Win、Mac 上进行安装,因为篇幅限制,会在后续的文章中介绍。
通过这篇文章你将学习到以下内容:
使用破解补丁无限制的使用 IntelliJ IDEA 破解补丁源码分析 Compose for Desktop or Android 应用程序所需的环境配置 如何配置多个不同版本的 JDK Compose for Desktop or Android 示例
环境
使用 Compose for Desktop 开发桌面应用程序,需要如下工具:
IntelliJ.IDEA-2020.3 以上 JDK 11 以上 Kotlin 1.4.2 以上
如果你的电脑上安装的是低版本的 JDK,我不建议你贸然升级到最新版本,因为你之前很多项目都是基于当前 JDK 版本进行开发的,而且有一些软件只在低版本的 JDK 上才能运行,例如 JD-GUI,所以可以在电脑上安装多个 JDK,例如开发 Compose for Desktop 使用 JDK 11,开发 Android 项目使用 JDK 8。
IntelliJ IDEA 开发工具是收费的,而且价格相对而言挺贵的,如果资金允许的前提下,可以前去购买,在本文中也会提供破解补丁,永久激活 IntelliJ IDEA。
我已经将 JDK 11 、IntelliJ.IDEA-(2020.3 ~ 2021.1) 以及 IntelliJ.IDEA 破解补丁已经上传到网盘上,可以 「 点击下方公众号」或者「搜索关注公众号:ByteCode」,回复关键词:compose,即可获取所有软件。
如何配置多个 JDK
这一小节中将会介绍如何在 MAC 上安装多个 JDK(PS: win 配置方式网上有很多教程,可自行搜索):
首先从 Oracle 官网下载并安装 JDK 11 也可以在公众号内,回复关键词:compose,即可获取
我们自己安装的 JDK 默认存放在 /Library/Java/JavaVirtualMachines/
目录下。
在命令行中输入 vi ~/.bash_profile
打开bash_profile
文件在 bash_profile
文件中配置不同版本 JDK 的路径
export JAVA_8_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home
export JAVA_11_HOME=/Library/Java/JavaVirtualMachines/jdk-11.0.11.jdk/Contents/Home
export JAVA_16_HOME=/Library/Java/JavaVirtualMachines/jdk-16.0.1.jdk/Contents/Home
在 bash_profile
文件中添加下面命令,用于切换不同 JDK 版本
alias jdk8='export JAVA_HOME=$JAVA_8_HOME'
alias jdk11='export JAVA_HOME=$JAVA_11_HOME'
alias jdk16='export JAVA_HOME=$JAVA_16_HOME'
验证是否配置成功
使用别名 alias jdk8
切换到 JDK 8 ,然后输入 java -version
获取当前 JDK 的版本。
localhost:~ $ jdk8
localhost:~ $
localhost:~ $ java -version
java version "1.8.0_51"
Java(TM) SE Runtime Environment (build 1.8.0_51-b16)
Java HotSpot(TM) 64-Bit Server VM (build 25.51-b03, mixed mode)
切换到其他 JDK 版本同样如此。
IntelliJ.IDEA 破解补丁的使用
在这一小节中将会介绍如何使用破解补丁永久激活 IntelliJ IDEA。感谢作者 pengzhile/ide-eval-resetter
提供的插件
https://gitee.com/pengzhile/ide-eval-resetter
IntelliJ IDEA 破解补丁,仅供个人学习使用, 请勿商用,建议购买正版 破解补丁适用于 IntelliJ IDEA 2020 ~ 2021.1 所有的版本,其他版本尚未尝试 破解教程适用于 Windows/Mac/Linux 系统
只需要五步即可永久使用 IntelliJ IDEA:
首先从 IDEA 官网下载 2021.1 版本并安装,也可以在公众号内,回复关键词:compose,即可获取 安装成功之后运行 IDEA 会弹出一个注册框,勾选 Evaluate for free
, 点击Evaluate
, 之后随便创建一个新的项目即可将破解补丁 ide-eval-resetter-2.1.6.zip
拖入 IDEA 界面中, 会弹出如下界面,点击Restart
重启 IDEA 即可(PS:破解补丁放在固定位置,不要移动)
重启 IDEA,点击顶部菜单栏 Help
,若列表中出现Eval Reset
选项,则代表安装成功点击顶部菜单栏 Help
->Eval Reset
,弹出如下界面,勾选Auto reset before per restart
,每次重启 IDE 会自动重置所有信息,你无需做额外的事情
验证是否永久激活 IntelliJ IDEA:
运行 IDEA,将系统时间修改到 30 天之后 点击顶部菜单栏 Help
->Register
查看剩余时间重启 IDEA,再次查看剩余时间,破解补丁会重置试用时间为 30 天
执行完以上步骤就,恭喜你现在可以开始使用 IDEA 开发桌面应用程序了。
破解补丁不仅适用于 IntelliJ IDEA,还适用于 Jetbrains 其他系列产品:AppCode 、 CLion 、 DataGrip 、GoLand 、PhpStorm 、PyCharm 、Rider 、RubyMine 、WebStorm。
以上是关于 Compose for Desktop 所需要的工具配置,Compose for Android 的环境配置非常的简单,从官网下载并安装 Android Studio 2020.3.1 Canary 14
然后在模板列表中选择 Empty Compose Activity ,等待 AS 构建完就可以开始使用了。
https://developer.android.google.cn/studio/preview
破解补丁分析
IntelliJ IDEA 是 Jetbrains 旗下的产品,Jetbrains 的产品会允许你试用 30 天,所以作者 pengzhile 写了一个插件,无限重置 30 天试用期,从而达到永久激活 IDEA 的目的。(PS: 如果 IntelliJ IDEA 版本有更新,千万不要升级)。
首次运行 IntelliJ IDEA 会弹出一个注册框,勾选 Evaluate for free
, 点击 Evaluate
会在 /Users/用户名/Library/Application\ Support/JetBrains/IntelliJIdea2021.1/eval/
目录下生成 idea211.evaluation.key
文件,这个文件记录当前的时间戳,作者会读取当前文件内容,重新写入新的时间戳,重置 30 天试用期,核心源码如下:
src/main/java/io/zhile/research/intellij/ier/ui/form/MainForm.java
Resetter.reset(Resetter.getEvalRecords());
调用 Resetter.getEvalRecords()
会遍历/Users/用户名/Library/Application\ Support/JetBrains/IntelliJIdea2021.1/
文件夹下面的内容调用 Resetter.reset()
方法,重新写入新的时间戳
接下里我们一起来看一下 Resetter.getEvalRecords()
方法的实现。
src/main/java/io/zhile/research/intellij/ier/common/Resetter.java
protected static File getEvalDir() {
String configPath = PathManager.getConfigPath();
return new File(configPath, "eval");
}
public static List<EvalRecord> getEvalRecords() {
List<EvalRecord> list = new ArrayList<>();
File evalDir = getEvalDir();
if (evalDir.exists()) {
File[] files = evalDir.listFiles();
if (files == null) {
NotificationHelper.showError(null, "List eval license file failed!");
} else {
for (File file : files) {
if (!file.getName().endsWith(".key")) {
continue;
}
list.add(new LicenseFileRecord(file));
}
}
}
.......
调用 getEvalRecords()
方法获取 /Users/用户名/Library/Application\ Support/JetBrains/IntelliJIdea2021.1/eval/
文件夹下以 .key
结尾的文件,然后重写里面的时间戳。
src/main/java/io/zhile/research/intellij/ier/common/LicenseFileRecord.java
public void reset() throws Exception {
if (!FileUtil.delete(file)) {
throw new Exception("Remove " + type + " failed: " + file.getAbsolutePath());
}
try (DataOutputStream dos = new DataOutputStream(new FileOutputStream(file))) {
dos.writeLong(~System.currentTimeMillis());
}
}
Compose for Android or Desktop 示例
在文章开头讲述了,Compose 是由 Kotlin 开发的 UI 工具包,Android 和 桌面应用程序之间大部分 UI 代码是共享的,也就是说在 Android 上使用的部分 UI 组件,同样也适用于桌面应用程序开发。如下图所示。
如上图所示 「创建 Button」核心的代码都是一样的, 如果你之前没有了解过 Compose, 上面的代码可能觉得很陌生,可以先忽略,只需要知道 Android 和 桌面应用程序之间大部分 UI 代码是共享的即可。
参考文章
https://developer.android.google.cn/jetpack/compose/setup https://gitee.com/pengzhile/ide-eval-resetter
全文到这里就结束了,如果有帮助欢迎 在看 、点赞 、分享 就是对我最大的鼓励
代码不止,文章不停
欢迎点击下方卡片关注我,持续分享最新的技术
点击上方公众号,回复关键词:compose,即可获取所有软件
推荐阅读:
最后推荐我一直在更新维护的项目和网站:
全新系列视频:现代 Android 开发 (MAD) 技巧系列教程
https://madskills.hi-dhl.com最新的 AndroidX Jetpack 相关组件的实战项目 以及 原理分析的文章
https://github.com/hi-dhl/AndroidX-Jetpack-PracticeLeetCode / 剑指 offer / 国内外大厂面试题 / 多线程 题解,语言 Java 和 kotlin,包含多种解法、解题思路、时间复杂度、空间复杂度分析
剑指 offer:https://offer.hi-dhl.com
LeetCode:https://leetcode.hi-dhl.com最新 Android 10 源码分析系列文章
https://github.com/hi-dhl/Android10-Source-Analysis一系列国外的技术文章,每篇文章都会有译者思考部分,对原文的更加深入的分析
https://github.com/hi-dhl/Technical-Article-Translation「为互联网人而设计,国内国外名站导航」涵括新闻、体育、生活、娱乐、设计、产品、运营、前端开发、Android 开发等等网址
https://site.51git.cn