“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.xml
的Apache 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.xml
或DEX
文件的更广泛示例以及Android 更深入的工作原理感兴趣,请查看here
如何签署已编译的 apk
见how to sign an already compiled apk 和this 来自@for3st 的回答是该帖子的相关部分:
手动流程:
第 1 步:生成密钥库(仅一次)
您需要生成一次密钥库并使用它来签署您的unsigned
apk。
使用%JAVA_HOME%/bin/
中的keytool
provided 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
的第一行设置你自己的APPNAME
、VENDORNAME
,并根据你的系统改变adb.exe
、keytool.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.dex
和AndroidManifest.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 不会启动/关闭