草庐IT

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

coder 2023-05-18 原文

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

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

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

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

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

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

NB4:我在 Windows 平台上工作,我已经开始了 "Hello World without IDE" github repo here基于 this answer ,但我有一些问题,例如 this one .另一方面,那里使用的方法似乎已被弃用......

最佳答案

是的,您可以轻松做到所有 从命令行(不涉及 IDE,我保证)。
本用老忠实Apache Ant .确实如此 不是 使用 Gradle ,这需要更多的工作。

总结

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

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

(这会生成一个 Apache Ant 构建文件,名为 build.xml 文件,它类似于 build.gradle 文件。现在编写一些代码,但 TestActivity.java 已经存在并将编译)
    ant debug

设置

( 注意 :“android.bat ”命令是 不推荐使用 因为构建工具 v26 见下面的旧链接)意味着 完全 已删除!{naughty 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
    

    下载Apache Ant来自 http://ant.apache.org/ .

    请参阅本教程进行设置: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
    

    嘿,presto,你有一个安卓 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 步:生成 keystore (仅一次)

    您需要生成一次 keystore 并使用它来签署您的 unsigned .apk
    使用 keytool provided by the JDK%JAVA_HOME%/bin/ 中找到
    keytool -genkey -v -keystore my.keystore -keyalg RSA -keysize 2048 -validity 10000 -alias app
    

    第 2 步或第 4 步:Zipalign

    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签约后。使用新时apksigner你在签名之前这样做的方法(令人困惑,我知道)。 Invoking zipalign before apksigner works fine因为 apksigner蜜饯APK对齐和压缩(与 jarsigner 不同)。

    您可以使用以下方法验证对齐:
    zipalign -c 4 my-aligned.apk
    

    第 3 步:签名和验证

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

    使用 jarsigner 与 keytool 一样,comes with the JDK distribution%JAVA_HOME%/bin/ 中找到并像这样使用它:
    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 文件进行未经授权的更改(有关更多详细信息,请参阅 herehere)。因此,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
    

    关于java - "Hello world"Android 应用,文件尽可能少,没有 IDE,只有文本编辑器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47167769/

    有关java - "Hello world"Android 应用,文件尽可能少,没有 IDE,只有文本编辑器的更多相关文章

    1. ruby-on-rails - rails : "missing partial" when calling 'render' in RSpec test - 2

      我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou

    2. ruby-on-rails - 由于 "wkhtmltopdf",PDFKIT 显然无法正常工作 - 2

      我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-

    3. ruby - 将差异补丁应用于字符串/文件 - 2

      对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl

    4. ruby - 如何以所有可能的方式将字符串拆分为长度最多为 3 的连续子字符串? - 2

      我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123

    5. ruby - 检查 "command"的输出应该包含 NilClass 的意外崩溃 - 2

      为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar

    6. ruby-on-rails - Rails 应用程序之间的通信 - 2

      我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此

    7. ruby - 无法运行 Rails 2.x 应用程序 - 2

      我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

    8. ruby-on-rails - Rails 应用程序中的 Rails : How are you using application_controller. rb 是新手吗? - 2

      刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr

    9. java - 等价于 Java 中的 Ruby Hash - 2

      我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/

    10. ruby-on-rails - 如何在我的 Rails 应用程序 View 中打印 ruby​​ 变量的内容? - 2

      我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby​​中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R

    随机推荐