“Hello world” Android 应用,文件尽可能少,没有 IDE,只有文本编辑器

Posted

技术标签:

【中文标题】“Hello world” Android 应用,文件尽可能少,没有 IDE,只有文本编辑器【英文标题】:"Hello world" Android app with as few files as possible, no IDE, and text editor only 【发布时间】:2018-04-20 10:27:10 【问题描述】:

在我使用过的几乎所有语言(Python、C、C++ 等)中,可以使用文本编辑器编写“hello world”应用程序并从命令运行它-line(解释语言)或从命令行(编译语言)编译/构建它,例如cl.exe helloworld1.cpp.

另一方面,每次我做一个android App时,我都需要使用Android Studio(在我的机器上很慢),用IDE创建一个新项目,等等。

问题:要生成 .apk Android 应用,最少需要多少极简 Java 源代码文件/项目文件? 如何从命令行构建它? (并且永远不必打开 IDE)

注意:我读过很多 hello world for Android,但都涉及使用 IDE。

NB2:我正在寻找用 Java 编写的标准应用程序,而不是 Kivy 等解决方案。

NB3:即使 IDE 可能更方便地编写 Android 应用程序,我也看不出有任何技术原因导致编译/构建大量文件绝对需要 IDE / 使用 GUI 进行编程。有些人(比如我)只喜欢命令行和文本编辑器,这样的无 IDE 解决方案会很有帮助。

NB4:我在Windows平台上工作,我已经在this answer的基础上启动了一个"Hello World without IDE" github repo here,但是我遇到了一些问题,例如this one。另一方面,那里使用的方法似乎已被弃用...

【问题讨论】:

这个怎么样? blukat29.github.io/2016/03/building-android-app-without-an-ide 谢谢,但是当我尝试将一些 Linux 代码(如您共享的链接)移植到 Windows 时,我遇到了很多小问题(有关此问题的更多详细信息)。 【参考方案1】:

是的,您可以从命令行轻松完成ALL(我保证不涉及IDE)。 这使用了老忠实Apache Ant。它确实使用Gradle,这需要更多的工作。

总结

您输入的是(只需 2 行即可生成 apk):

    android create project --target "android-16" --path basj --activity TestActivity --package com.android.basj 

(这会生成一个名为build.xmlApache Ant 构建文件,它与build.gradle 文件类似。现在编写一些代码,但TestActivity.java 已经存在并且可以编译)

    ant debug

设置

(注意:“android.bat”命令自 Build Tools v26 以来已弃用,因此请使用旧的(请参阅下面的链接),deprecated 在这种情况下意味着 TOTALLY 已删除!淘气的 Google)。

    如果尚未安装,请安装Java JDK(例如可以使用jdk-8u151-windows-x64.exe),并确保JAVA_HOME环境变量is defined例如:

    JAVA_HOME=C:\Program Files\Java\jdk1.8.0_112 JAVA_PATH=C:\Program Files\Java\jre1.8.0_112\bin

JDK 是 Java 开发工具包。JRE 是 Java 运行时环境。

    如果尚未安装Android SDK Tools(例如installer_r24.4.1-windows.exe,请参阅this answer),然后在SDK Manager GUI 中取消选择所有内容并选择“Android SDK Build-Tools”(例如Android SDK Build-Tools 19.1 ) + 一个(或多个)平台(例如Android 4.1.2 (API 16) JELLY_BEAN)。为了证明你不需要Android Studio,不打算下载它! (仅限 SDK)。

    下载Apache Ant(例如apache-ant-1.9.9-bin.zip)

详情

使用Android SDK从命令行创建项目:

决定放置你的项目的地方:

cd c:\android
mkdir antTest
cd antTest

运行命令:

C:\Android\sdk1\tools\android create project --target "android-16" --path basj --activity TestActivity --package com.android.basj 
              ^
              |
--------------+ (here's where I keep an old version of tools (version 25 in my case)

这是创建的目录结构(以及您需要构建的所有文件):

C:.
+---basj
    +---bin
    +---libs
    +---res
    ¦   +---drawable-hdpi
    ¦   +---drawable-ldpi
    ¦   +---drawable-mdpi
    ¦   +---drawable-xhdpi
    ¦   +---layout
    ¦   +---values
    +---src
        +---com
            +---android
                +---basj

创建项目的详细输出:

Created project directory: C:\Android\antTest\basj
Created directory C:\Android\antTest\basj\src\com\android\basj
Added file C:\Android\antTest\basj\src\com\android\basj\TestActivity.java
Created directory C:\Android\antTest\basj\res
Created directory C:\Android\antTest\basj\bin
Created directory C:\Android\antTest\basj\libs
Created directory C:\Android\antTest\basj\res\values
Added file C:\Android\antTest\basj\res\values\strings.xml
Created directory C:\Android\antTest\basj\res\layout
Added file C:\Android\antTest\basj\res\layout\main.xml
Created directory C:\Android\antTest\basj\res\drawable-xhdpi
Created directory C:\Android\antTest\basj\res\drawable-hdpi
Created directory C:\Android\antTest\basj\res\drawable-mdpi
Created directory C:\Android\antTest\basj\res\drawable-ldpi
Added file C:\Android\antTest\basj\AndroidManifest.xml
Added file C:\Android\antTest\basj\build.xml
Added file C:\Android\antTest\basj\proguard-project.txt

从http://ant.apache.org/下载Apache Ant。

请参阅本教程进行设置:http://www.vogella.com/tutorials/ApacheAnt/article.html

另见本教程:http://blog.vogella.com/2011/03/16/creating-android-applications-via-the-command-line-ant/

编写您的代码(Hello world)。

运行此命令,您会从另一端获得一个 Android Apk(称为 TestActivity-debug.apk):

ant debug

你好,你有一个 android apk ! 添加了新结构:

C:.
├───bin
│   ├───classes
│   │   └───com
│   │       └───android
│   │           └───basj
│   ├───dexedLibs
│   └───res
│       ├───drawable-hdpi
│       ├───drawable-ldpi
│       ├───drawable-mdpi
│       └───drawable-xhdpi
├───gen
│   └───com
│       └───android
│           └───basj

对于最终构建:

ant release

如果您对Ant build.xmlDEX 文件的更广泛示例以及Android 更深入的工作原理感兴趣,请查看here

如何签署已编译的 apk

见how to sign an already compiled apk 和this 来自@for3st 的回答是该帖子的相关部分:

手动流程:

第 1 步:生成密钥库(仅一次)

您需要生成一次密钥库并使用它来签署您的unsigned apk。 使用%JAVA_HOME%/bin/中的keytoolprovided by the JDK

keytool -genkey -v -keystore my.keystore -keyalg RSA -keysize 2048 -validity 10000 -alias app

第 2 步或第 4 步:压缩对齐

zipalign which is a tool provided by the Android SDK 在例如%ANDROID_HOME%/sdk/build-tools/24.0.2/ 是一个强制优化步骤,如果你想将 apk 上传到 Play 商店。

zipalign -p 4 my.apk my-aligned.apk

注意:当使用旧的jarsigner 时,您需要在zipalign AFTER 签名。当使用新的apksigner 方法时,您会在BEFORE 签名之前进行(我知道这很令人困惑)。 Invoking zipalign before apksigner works fine 因为apksigner 保留APK 对齐和压缩(与jarsigner 不同)。

您可以验证对齐方式:

zipalign -c 4 my-aligned.apk

第 3 步:签名和验证

使用 24.0.2 及更早版本的构建工具

使用jarsigner,就像在%JAVA_HOME%/bin/ 中找到的keytool comes with the JDK distribution 并像这样使用它:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my.keystore my-app.apk my_alias_name

并且可以通过验证

jarsigner -verify -verbose my_application.apk

使用构建工具 24.0.3 和更新版本

Android 7.0 引入了APK Signature Scheme v2,这是一种新的应用程序签名方案,可提供更快的应用程序安装时间,并提供更多保护以防止未经授权的 APK 文件更改(有关详细信息,请参阅 here 和 here)。因此,Google 实现了他们的own apk signer called: apksigner(呃!) 可以在%ANDROID_HOME%/sdk/build-tools/24.0.3/ 中找到脚本文件(.jar 位于/lib 子文件夹中)。像这样使用它:

apksigner sign --ks my.keystore my-app.apk --ks-key-alias alias_name

并且可以通过以下方式进行验证:

apksigner verify my-app.apk

【讨论】:

好极了,我现在要测试这个!由于我不了解 Apache Ant,这里是“什么是 Apache Ant?”的答案。来自其常见问题解答:Ant 是一个基于 Java 的构建工具。从理论上讲,它有点像 Make,没有 Make 的皱纹,并且具有纯 Java 代码的完全可移植性。 我刚刚构建了它以确保它可以正常工作,如果您遇到路径问题,请告诉我,但它非常简单。 早上。我不确定你是如何“侧载”apk的,但如果你先在手机上删除调试,那么发布应该可以工作(我稍后会检查)。从我的记忆中对包进行签名大约需要六个命令,我会找到这些命令(以及稍后的工具),但您可以使用“android 手动签名”搜索它们。 “读取手机状态和身份”,我会检查。但是您构建了apk,做得很好。嗯,你的问题有 +8 和 -2 票,多么奇怪,这是个好问题。 @JonGoodwin,你赢得了互联网,先生。 再次感谢@JonGoodwin 的精彩回答。我创建了一个 createproject.bat 批处理,它可以完成所有操作 in this answer。【参考方案2】:

这是一种即用型构建 Android 应用的方法,甚至无需安装/打开 Android Studio 一次(这是一个很酷的 IDE,但像我这样的人更喜欢文本编辑器+ 命令行)。最后,您将获得一个完全签名/对齐的 APK,可以在 Google Play 商店中使用。

完全归功于 JonGoodwin answer,我只是在这里用一个可以完成所有任务的 createproject.bat 批处理进行了总结。

先决条件(有关它们的更多详细信息,请参阅his answer):您需要安装这些工具:

Java JDK

Android SDK 工具

阿帕奇蚂蚁

现在只要修改这个createproject.bat的第一行设置你自己的APPNAMEVENDORNAME,并根据你的系统改变adb.exekeytool.exe等的路径。

然后运行createproject.bat。它将创建一个新文件夹helloworld。您会在那里找到一些 .bat 文件,这些文件将用于构建您的应用程序!


createproject.bat

@echo off
SET APPNAME=helloworld
SET VENDORNAME=demo
SET SIGNKEYPASSWORD=abcdef12
SET ANTBATPATH="..\..\apache-ant-1.9.9-bin\bin\ant.bat"
SET ADBPATH="C:\Users\User\AppData\Local\Android\android-sdk\platform-tools\adb.exe"
SET KEYTOOLPATH="C:\Program Files\Java\jdk1.8.0_151\bin\keytool.exe"
SET JARSIGNERPATH="C:\Program Files\Java\jdk1.8.0_151\bin\jarsigner.exe"
SET ZIPALIGNPATH="C:\Users\User\AppData\Local\Android\android-sdk\build-tools\19.1.0\zipalign.exe"
SET ANDROIDBATPATH="C:\Users\User\AppData\Local\Android\android-sdk\tools\android.bat"

call %ANDROIDBATPATH% create project --target "android-16" --path %APPNAME% --activity %APPNAME% --package com.%VENDORNAME%.%APPNAME%

(
echo call %ANTBATPATH% debug
echo copy bin\*debug.apk .
) > %APPNAME%\1makedebug.bat


echo %ADBPATH% logcat > %APPNAME%\2adb_logcat.bat
echo %ADBPATH% devices > %APPNAME%\2adb_devices.bat
echo %ADBPATH% install -r %APPNAME%-debug.apk > %APPNAME%\2adb_install.bat
echo %ADBPATH% shell > %APPNAME%\2adb_shell.bat

(
echo call %ANTBATPATH% release
echo %JARSIGNERPATH% -sigalg SHA1withRSA -digestalg SHA1 -keystore my.keystore "bin\%APPNAME%-release-unsigned.apk" app -storepass %SIGNKEYPASSWORD%
echo %ZIPALIGNPATH% 4 "bin\%APPNAME%-release-unsigned.apk" "%APPNAME%-release.apk"
echo pause
) > %APPNAME%\3makerelease_signed.bat

%KEYTOOLPATH% -genkey -keystore %APPNAME%\my.keystore -keyalg RSA -keysize 2048 -validity 10000 -alias app -dname "cn=Unknown, ou=Unknown, o=Unknown, c=Unknown" -storepass %SIGNKEYPASSWORD% -keypass %SIGNKEYPASSWORD%

echo Finished.
pause

【讨论】:

【参考方案3】:

极简Java源代码的最少数量是多少 文件/项目文件以生成 .apk Android 应用?

构建android Apk文件classes.dexAndroidManifest.xml只需要这2个文件,查看 this blog post 获取完整信息。

到目前为止,最小的 apk 大小为 678 字节。查看此repo

【讨论】:

感谢@Redman。事实上,问题不仅仅是“有多少”,而是你能举出这样一个极简主义的例子吗?如何通过命令行(无 IDE)构建它? 我还没有构建它,但是在博文中有一节“我们要去哪里,我们不需要IDE”,看看吧。 如果您可以在几个步骤中放置一个可行的可重现方法会很酷,在这个答案中:不需要所有这篇文章(我们不需要所有针对小型 apk 的优化),但只有如何从 java + manifest 到 APK。对很多人来说这将是一个有价值的信息:)【参考方案4】:

与其试图解决这个问题,不如直接从 Android Studio 创建一个空项目。它将拥有您需要的一切,以及您可以通过 gradlew 构建的 gradle 配置。然后将它保存在硬盘上的某个位置,并使用它的副本作为新项目的开始。

【讨论】:

不是我所期望的:') @JoachimHuet 将其视为实用主义方法。从技术上讲,一个 Android 应用程序只需要一个清单和一个 Java 文件(对于一个活动,假设您实际上想让它打印 hello world。从技术上讲,活动是可选的)。但是利用系统构建它比弄清楚如何完成 gradle 和 android 构建系统为你做的所有事情要容易得多。 @GabeSechan 怎么可能只有 manifest.xml 和 main.java 并在命令行中从它们构建一个 apk? @Basj 当您需要一个非 Java 资源(如 xml 布局文件或图像/图标)时,您将需要开始打包资源,请参阅:developer.android.com/studio/build/index.html,以及在 AS 中运行所有任务的 gradle 控制台。过去,您可以从命令行创建一个空的 Android 项目,但该功能已被删除,现在您只能从 Android Studio 中创建一个空的 Android 项目(gradle 设置、目录设置、占位符资源等) 我明白@MorrisonChang 的观点,但仍然没有技术 原因来编译/构建大量文件绝对需要 IDE / 使用 GUI 进行编程。有些人(比如我)只喜欢命令行和文本编辑器/【参考方案5】:

如果您发现 android 开发过于复杂并想要更简单的解决方案 - 我建议您尝试 Flutter。

您可以编写更易于理解且可在 Android 或 iPhone 上运行的应用程序。它使用的语言 Dart 与 Java 有很多相似之处。

这是一个 hello world 教程,它使用 IDE 和 windows 中的命令行来构建一个 android 应用程序。

https://www.youtube.com/watch?v=CEPCGXQ7IQg

【讨论】:

以上是关于“Hello world” Android 应用,文件尽可能少,没有 IDE,只有文本编辑器的主要内容,如果未能解决你的问题,请参考以下文章

在Android Studio中创建(或添加)第一个Hello World应用程序

“Hello world” Android 应用,文件尽可能少,没有 IDE,只有文本编辑器

HaxeFlixel - 带有 android 的 Hello World 不会启动/关闭

[Python 应用:Android App] Hello World App 之Kivy 介绍以及基本配置

Qt for Android之Hello World

WEEX快速创建工程 Hello World