单独使用Android SDK的Hello world(无IDE)

Mic*_*lan 13 android android-build

我的目标是:

  1. 在一个简单的程序上测试基本的开发工具
  2. 将程序扩展为有用的应用程序

我更喜欢使用小型独立工具而不是IDE.我更喜欢使用过程式或命令式(纯Java)而不是声明式(XML)进行编码.

按照说明安装了独立的Android SDK .我有必要的最少的其他工具(文本编辑器,命令shell和JDK).但我能找到的唯一开始指令与Android Studio,Eclipse或其他IDE相关联.我跟不上他们.

如何使用我的文本编辑器编写Java程序以在Android设备上显示"Hello world"?如何使用SDK模拟器进行测试?请给我指示.

Mic*_*lan 13

这些是最终适合我的指示.我通过解构谷歌的Ant脚本来获得它们,Rob的答案就是基于这个脚本.


以下内容来自Stack Overflow Documentation(在此存档)的"没有IDE的Android编程" ; 版权所有2017年由geekygenius,Michael Allan,cascal,Doron Behar,mnoronhaAndroidMechanic ; 根据CC BY-SA 3.0获得许可.可以在archive.org中找到完整的Stack Overflow Documentation内容的存档,其中该示例由其主题ID:85索引,例如:9496.

这是一个极简主义的Hello World示例,仅使用最基本的Android工具.

要求和假设

这个例子假设Linux.您可能需要调整自己平台的语法.

设置Android SDK

解压缩SDK版本后:

  1. 使用SDK管理器安装其他软件包.请勿android update sdk --no-ui按照捆绑的Readme.txt中的说明使用; 它下载了大约30 GB的不必要文件.而是使用交互式SDK管理器android sdk 来获得建议的最小包.

  2. 将以下JDK和SDK目录附加到执行PATH.这是可选的,但下面的说明假定它.

    • JDK/bin中
    • SDK /平台的工具
    • SDK /工具
    • SDK/build-tools/LATEST (在步骤1中安装)
  3. 创建Android虚拟设备.使用交互式AVD管理器(android avd).您可能需要调整一下并寻求建议; 在现场的指令并不总是有益的.

    (您也可以使用自己的设备)

  4. 运行设备:

    emulator -avd DEVICE
    
    Run Code Online (Sandbox Code Playgroud)
  5. 如果设备屏幕似乎已锁定,则滑动以将其解锁.

    在编写应用程序时让它保持运行.

编写应用程序

  1. 切换到空工作目录.

  2. 制作源文件:

    mkdir --parents src/dom/domain
    touch src/dom/domain/SayingHello.java
    
    Run Code Online (Sandbox Code Playgroud)

    内容:

    package dom.domain;
    import android.widget.TextView;
    
    public final class SayingHello extends android.app.Activity
    {
        protected @Override void onCreate( final android.os.Bundle activityState )
        {
            super.onCreate( activityState );
            final TextView textV = new TextView( SayingHello.this );
            textV.setText( "Hello world" );
            setContentView( textV );
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 添加清单:

    touch AndroidManifest.xml
    
    Run Code Online (Sandbox Code Playgroud)

    内容:

    <?xml version='1.0'?>
    <manifest xmlns:a='http://schemas.android.com/apk/res/android'
     package='dom.domain' a:versionCode='0' a:versionName='0'>
        <application a:label='Saying hello'>
            <activity a:name='dom.domain.SayingHello'>
                 <intent-filter>
                    <category a:name='android.intent.category.LAUNCHER'/>
                    <action a:name='android.intent.action.MAIN'/>
                    </intent-filter>
                </activity>
            </application>
        </manifest>
    
    Run Code Online (Sandbox Code Playgroud)
  4. 为声明的资源创建一个子目录:

    mkdir res
    
    Run Code Online (Sandbox Code Playgroud)

    暂时把它留空.

构建代码

  1. 生成资源声明的源.在这里替换SDK的正确路径,以及要构建的已安装API(例如"android-23"):

    aapt package -f \
      -I SDK/platforms/android-API/android.jar \
      -J src -m \
      -M AndroidManifest.xml -S res -v
    
    Run Code Online (Sandbox Code Playgroud)

    资源声明(下面进一步描述)实际上是可选的.同时,如果res /仍为空,则上述调用不执行任何操作.

  2. 将源代码编译为Java字节码(.java→.class):

    javac \
      -bootclasspath SDK/platforms/android-API/android.jar \
      -classpath src -source 1.7 -target 1.7 \
      src/dom/domain/*.java
    
    Run Code Online (Sandbox Code Playgroud)
  3. 将字节码从Java转换为Android(.class→.dex):

    首先使用Jill(.class→.jayce):

    java -jar SDK/build-tools/LATEST/jill.jar \
      --output classes.jayce src
    
    Run Code Online (Sandbox Code Playgroud)

    杰克(.jayce→.dex):

    java -jar SDK/build-tools/LATEST/jack.jar \
      --import classes.jayce --output-dex .
    
    Run Code Online (Sandbox Code Playgroud)

    Android字节码曾被称为"Dalvik可执行代码",因此称为"dex".

    如果你愿意的话,你可以用一次电话替换Jack替换步骤11和12; 它可以直接从Java源代码编译(.java→.dex).但编译有一些优势javac.它是一种更为人所知,记录更好,应用更广泛的工具.

  4. 打包资源文件,包括清单:

    aapt package -f \
      -F app.apkPart \
      -I SDK/platforms/android-API/android.jar \
      -M AndroidManifest.xml -S res -v
    
    Run Code Online (Sandbox Code Playgroud)

    这导致部分APK文件(Android应用程序包).

  5. 使用该ApkBuilder工具制作完整的APK :

    java -classpath SDK/tools/lib/sdklib.jar \
      com.android.sdklib.build.ApkBuilderMain \
      app.apkUnalign \
      -d -f classes.dex -v -z app.apkPart
    
    Run Code Online (Sandbox Code Playgroud)

    它警告说,"这个工具已被弃用.有关更多信息,请参阅--help." 如果--help失败ArrayIndexOutOfBoundsException,则不传递任何参数:

    java -classpath SDK/tools/lib/sdklib.jar \
      com.android.sdklib.build.ApkBuilderMain
    
    Run Code Online (Sandbox Code Playgroud)

    它解释了ApkBuilderMain不推荐使用CLI(),而是直接调用Java API(ApkBuilder).(如果您知道如何从命令行执行此操作,请更新此示例.)

  6. 优化APK的数据对齐(推荐做法):

    zipalign -f -v 4 app.apkUnalign app.apk
    
    Run Code Online (Sandbox Code Playgroud)

安装并运行

  1. 将应用安装到Android设备:

    adb install -r app.apk
    
    Run Code Online (Sandbox Code Playgroud)
  2. 启动应用:

    adb shell am start -n dom.domain/.SayingHello
    
    Run Code Online (Sandbox Code Playgroud)

    它应该运行并打个招呼.

就这样.这就是用基本的Android工具打招呼所需要的.

声明资源

此部分是可选的.简单的"hello world"应用程序不需要资源声明.如果您的应用程序不需要它们,那么您可以通过省略步骤10并从步骤13中删除对res /目录的引用来稍微简化构建.

否则,这是一个如何声明资源以及如何引用它的简短示例.

  1. 添加资源文件:

    mkdir res/values
    touch res/values/values.xml
    
    Run Code Online (Sandbox Code Playgroud)

    内容:

    <?xml version='1.0'?>
    <resources>
        <string name='appLabel'>Saying hello</string>
    </resources>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 从XML清单引用资源.这是一种声明式的参考风格:

    <!-- <application a:label='Saying hello'> -->
         <application a:label='@string/appLabel'>
    
    Run Code Online (Sandbox Code Playgroud)
  3. 从Java源引用相同的资源.这是一个必要的参考:

    // v.setText( "Hello world" );
       v.setText( "This app is called "
         + getResources().getString( R.string.appLabel ));
    
    Run Code Online (Sandbox Code Playgroud)
  4. 通过重建,重新安装和重新运行应用程序来测试上述修改(步骤10-17).

    它应该重新启动并说,"这个应用程序叫做Saying hello".

卸载应用程序

adb uninstall dom.domain
Run Code Online (Sandbox Code Playgroud)

也可以看看

  • @Calmarius,我很想看看您是否有更短的流程。 (2认同)

Rob*_*Rob 2

首先,真的不要考虑使用模拟器。除非你只是想承受不必要的折磨。对于那些不想要 IDE 包袱的人来说,模拟器要差 100 倍。关于这一点,建议购买一个设备。

您将无法放弃 XML。我理解并感激我也有类似的冲动。然而,我最终还是爱上了它。大量使用样式。我建议使用 Android Studio。它有一个很棒的代码和界面构建器标记的 lint 工具。

即使您只想从编辑器中编写代码,您也可能需要使用 Android Studio 来制作项目存根。这方面做得相当不错。如果您不知道这一点,在文档中,有一种命令行方式来创建项目(不使用 AS):它记录在此处

  • 谢谢,我错过了[那些说明](http://developer.android.com/training/basics/firstapp/creating-project.html#CommandLine) 尽管如此,我觉得依赖于自动生成的源运行的13个文件与“hello world”的精神背道而驰。这些工具自己会说“hello world”。相反,我想说“你好,世界”_使用_这些工具(最基本的工具),并亲身感受_至少_需要做什么。 (2认同)