我一直在努力在命令行上为Android开发一个简单的"Hello World"应用程序.

理想情况下,我希望使用像CMake或Meson这样的工具,这样我将来就可以管理更大的应用程序.这些工具似乎严重缺乏对Android的支持,尽管Android已经存在了15年.

似乎Android开发人员已经决定,构建应用程序的唯一方式是通过Android Studio,但是,我个人讨厌在IDE中工作.

我试着遵循Gradle的使用说明,这似乎是Android Studio的一种可能的替代方案,但这些说明非常简单,非常可怕.Gradle本身看起来就像一个完全混乱的工具,有着过于复杂的使用范例.

考虑到Android APK实际上只不过是一个稍微重新组织的Java JAR文件,这一切怎么可能被弄得如此混乱?

任何帮助非常感谢.

推荐答案

使用Gradle构建Android应用程序非常简单,不需要使用Android Studio.

首先,您需要下载Android SDK.此外,你还需要了解AGP,这是Gradle的一个插件.这个插件添加了一些任务,比如为你创建一个APK的"组装"任务.

以下是在命令行中构建Android应用程序的一些步骤:

  1. 创建一个名为"Scratch"的空目录,然后创建cd scratch.
  2. 在此目录中运行gradle init,然后 Select 基本项目类型和kotlin DSL作为构建脚本.
  3. 打开settings.gradle.kts并为插件设置存储库(它会告诉Gradle在哪里寻找我们稍后添加的插件),还为依赖项(这些依赖项是您稍后添加的库)设置存储库.因此,将以下几行代码添加到settings.gradle.kts中的项目名称的顶部:
pluginManagement {
    repositories {
        gradlePluginPortal()
        google()
        mavenCentral()
    }
}
dependencyResolutionManagement {
    repositories {
        google()
        mavenCentral()
    }
}
  1. 现在,为了确保你是在正确的方式,只需运行./gradlew在你的根目录("scratch"在这个例子中).
  2. 打开build.gradle.kts并将插件添加到您的项目,然后配置您的Android项目.
plugins {

    id ("com.android.application") version "8.2.0"
    id ("org.jetbrains.kotlin.android") version "1.9.20"

}

android {
    namespace = "com.example.scratch"
    compileSdk = 34
}

第一个插件是AGP,用于创建一个Android应用程序,第二个插件将Kotlin添加到您的项目中.(因为我们在上面的代码中使用了AGP 8.2,所以请确保您用gradle/wrapper/gradle-wrapper.properties编写的Gradle版本是8.2)

distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip
  1. 您应该创建一个src文件夹来放置您的源代码和资源,比如图片,所以运行mkdir -p src/main/java/com/example/scratch.
  2. 最后一步是在src/main目录中创建一个AndroidManifest.xml文件.因此,在您的androidManifest.xml中编写以下代码:
<?xml version="1.0" encoding="UTF-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">

</manifest>
  1. 使用./gradlew assemble创建您的APK(它将在build/outputs/apk目录中创建).

现在您可以添加活动并开始开发您的应用程序.

注意,Android Studio为你的应用程序创建了一个模块,但我们没有创建任何模块,所以如果你想创建模块,你可以稍微改变上面的一些步骤来完成.(很简单)

Android相关问答推荐

致命信号6(SIGABRT)MAUI应用程序在android net发布时崩溃.8、使用强制屏幕方向和并发GC

无法理解Kotlin Coroutines and Flows中的J.C.编程行为

list 合并失败,AGP 8.3.0

Kotlin DSL:为什么我可以从Play Store获取发布版本的日志(log)?

DocumentFile.canWrite()、DocumentFile.Existes()-使用本地内置手机存储(而不是云)时性能较差(占用太多CPU时间)

Jetpack Compose中尺寸不断增加的动画

找不到com.android.tools.build:gradle:8.0

为什么我在 android 中使用 TabLayout 时无法启动我的 Activity?

Android v31 及更低版本中 ImageView 中的圆角

可组合函数无限地从视图模型获取值

如何在 kotlin 中接收带有和不带有可空对象的集合并保持引用相同

在 Jetpack Compose 中包装内容

验证硬编码密码

try 使用 ViewPager2 实现滑动视图时出现类型不匹配错误

调用时 listFiles() nullpointerexception

如何在jetpack compose中创建自定义rememberState?

如何在 Compose 中更改高程 colored颜色 ?

如何在 kotlin 的 android room DB 中设置一对多关系

Android全屏AlertDialog

如何删除 Ktor 客户端 2.0.0 的默认标头