我的目标是:
与IDE相比,我更喜欢使用小型的独立工具。与声明式(XML)相比,我更喜欢以过程式或命令式(普通的Java)编码。
我安装了独立的Android SDK as instructed。我至少需要其他工具(文本编辑器,命令 shell 和JDK)。但是我能找到的唯一入门说明与Android Studio,Eclipse或其他IDE绑定(bind)。我不能跟随他们。
如何使用文本编辑器编写Java程序以在Android设备上显示“Hello world”?如何使用SDK仿真器对其进行测试?请给我指示。
最佳答案
这些是最终为我工作的说明。我通过解构Google的Ant脚本来获得它们,Rob的答案就是基于该脚本。
The following content is from "Android programming without an IDE" from Stack Overflow Documentation (archived here); copyright 2017 by geekygenius, Michael Allan, cascal, Doron Behar, mnoronha, and AndroidMechanic; licensed under CC BY-SA 3.0. An archive of the full Stack Overflow Documentation content can be found at archive.org, in which this example is indexed by its topic ID: 85, as example: 9496.
这是一个简约的Hello World示例,仅使用最基本的Android工具。
要求和假设
本示例假设使用Linux。您可能必须针对自己的平台调整语法。
设置Android SDK
解压缩SDK版本后:
不要按照 bundle 的Readme.txt中的指示使用
android update sdk --no-ui
;它会下载约30 GB的不必要文件。
而是使用交互式SDK管理器
android sdk
获得建议的最小包装数量。 这是可选的,但是下面的说明是假定的。
使用交互式AVD管理器(
android avd
)。您可能需要摆弄一些东西并寻求建议。
on-site instructions并不总是有用。
(您也可以使用自己的设备)
emulator -avd DEVICE
在编写应用程序代码时,使其保持运行状态。
编写应用程式
mkdir --parents src/dom/domain
touch src/dom/domain/SayingHello.java
内容:
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 );
}
}
touch AndroidManifest.xml
内容:
<?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>
mkdir res
现在将其留空。
构建代码
在此处替换为 SDK 的正确路径,
以及要针对其构建的已安装 API (例如“android-23”):
aapt package -f \
-I SDK/platforms/android-API/android.jar \
-J src -m \
-M AndroidManifest.xml -S res -v
资源声明(下面将进一步描述)实际上是可选的。
同时,如果res/仍然为空,则上述调用不执行任何操作。
javac \
-bootclasspath SDK/platforms/android-API/android.jar \
-classpath src -source 1.7 -target 1.7 \
src/dom/domain/*.java
首先使用Jill(.class→.jayce):
java -jar SDK/build-tools/LATEST/jill.jar \
--output classes.jayce src
然后 jack (.jayce→.dex):
java -jar SDK/build-tools/LATEST/jack.jar \
--import classes.jayce --output-dex .
Android字节码曾经被称为“Dalvik可执行代码”,因此被称为“dex”。
如果愿意,您可以只打一个电话就可以替换步骤11和12。
它可以直接从Java源代码(.java→.dex)进行编译。
但是使用
javac
进行编译有很多优点。这是一个更广为人知,文档更丰富,适用范围更广的工具。
aapt package -f \
-F app.apkPart \
-I SDK/platforms/android-API/android.jar \
-M AndroidManifest.xml -S res -v
这样会产生部分APK文件(Android应用程序包)。
ApkBuilder
工具制作完整的APK:java -classpath SDK/tools/lib/sdklib.jar \
com.android.sdklib.build.ApkBuilderMain \
app.apkUnalign \
-d -f classes.dex -v -z app.apkPart
它警告:“此工具已弃用。有关详细信息,请参阅--help。”
如果
--help
失败并显示ArrayIndexOutOfBoundsException
,然后改为不传递任何参数:
java -classpath SDK/tools/lib/sdklib.jar \
com.android.sdklib.build.ApkBuilderMain
它说明不推荐使用CLI(
ApkBuilderMain
)支持直接调用Java API(
ApkBuilder
)。(如果您知道如何从命令行执行此操作,请更新此示例。)
zipalign -f -v 4 app.apkUnalign app.apk
安装和运行
adb install -r app.apk
adb shell am start -n dom.domain/.SayingHello
它应该运行并打个招呼。
就这样。这就是使用基本的Android工具打个招呼所需要的。
声明资源
本部分是可选的。
简单的“hello world”应用程序不需要资源声明。
如果您的应用程序也不需要它们,
那么您可以通过省略步骤10来简化构建过程,
并从步骤13中删除对res/目录的引用。
否则,这是有关如何声明资源的简短示例,
以及如何引用它。
mkdir res/values
touch res/values/values.xml
内容:
<?xml version='1.0'?>
<resources>
<string name='appLabel'>Saying hello</string>
</resources>
这是一种声明式的引用方式:
<!-- <application a:label='Saying hello'> -->
<application a:label='@string/appLabel'>
这是当务之急的引用:
// v.setText( "Hello world" );
v.setText( "This app is called "
+ getResources().getString( R.string.appLabel ));
并重新运行该应用程序(步骤10-17)。
它应该重新启动,并说:“此应用程序称为“打招呼”。
卸载应用
adb uninstall dom.domain
也可以看看
关于android - 单独使用Android SDK的Hello world(无IDE),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29178552/