Mic*_*lan 13 android android-build
我的目标是:
我更喜欢使用小型独立工具而不是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,mnoronha和AndroidMechanic ; 根据CC BY-SA 3.0获得许可.可以在archive.org中找到完整的Stack Overflow Documentation内容的存档,其中该示例由其主题ID:85索引,例如:9496.
这是一个极简主义的Hello World示例,仅使用最基本的Android工具.
这个例子假设Linux.您可能需要调整自己平台的语法.
解压缩SDK版本后:
使用SDK管理器安装其他软件包.请勿android update sdk --no-ui按照捆绑的Readme.txt中的说明使用; 它下载了大约30 GB的不必要文件.而是使用交互式SDK管理器android sdk
来获得建议的最小包.
将以下JDK和SDK目录附加到执行PATH.这是可选的,但下面的说明假定它.
创建Android虚拟设备.使用交互式AVD管理器(android avd).您可能需要调整一下并寻求建议; 在现场的指令并不总是有益的.
(您也可以使用自己的设备)
运行设备:
emulator -avd DEVICE
Run Code Online (Sandbox Code Playgroud)如果设备屏幕似乎已锁定,则滑动以将其解锁.
在编写应用程序时让它保持运行.
切换到空工作目录.
制作源文件:
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)添加清单:
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)为声明的资源创建一个子目录:
mkdir res
Run Code Online (Sandbox Code Playgroud)
暂时把它留空.
生成资源声明的源.在这里替换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 /仍为空,则上述调用不执行任何操作.
将源代码编译为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)将字节码从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.它是一种更为人所知,记录更好,应用更广泛的工具.
打包资源文件,包括清单:
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应用程序包).
使用该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).(如果您知道如何从命令行执行此操作,请更新此示例.)
优化APK的数据对齐(推荐做法):
zipalign -f -v 4 app.apkUnalign app.apk
Run Code Online (Sandbox Code Playgroud)将应用安装到Android设备:
adb install -r app.apk
Run Code Online (Sandbox Code Playgroud)启动应用:
adb shell am start -n dom.domain/.SayingHello
Run Code Online (Sandbox Code Playgroud)
它应该运行并打个招呼.
就这样.这就是用基本的Android工具打招呼所需要的.
此部分是可选的.简单的"hello world"应用程序不需要资源声明.如果您的应用程序不需要它们,那么您可以通过省略步骤10并从步骤13中删除对res /目录的引用来稍微简化构建.
否则,这是一个如何声明资源以及如何引用它的简短示例.
添加资源文件:
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)从XML清单引用资源.这是一种声明式的参考风格:
<!-- <application a:label='Saying hello'> -->
<application a:label='@string/appLabel'>
Run Code Online (Sandbox Code Playgroud)从Java源引用相同的资源.这是一个必要的参考:
// v.setText( "Hello world" );
v.setText( "This app is called "
+ getResources().getString( R.string.appLabel ));
Run Code Online (Sandbox Code Playgroud)通过重建,重新安装和重新运行应用程序来测试上述修改(步骤10-17).
它应该重新启动并说,"这个应用程序叫做Saying hello".
adb uninstall dom.domain
Run Code Online (Sandbox Code Playgroud)
首先,真的不要考虑使用模拟器。除非你只是想承受不必要的折磨。对于那些不想要 IDE 包袱的人来说,模拟器要差 100 倍。关于这一点,建议购买一个设备。
您将无法放弃 XML。我理解并感激我也有类似的冲动。然而,我最终还是爱上了它。大量使用样式。我建议使用 Android Studio。它有一个很棒的代码和界面构建器标记的 lint 工具。
即使您只想从编辑器中编写代码,您也可能需要使用 Android Studio 来制作项目存根。这方面做得相当不错。如果您不知道这一点,在文档中,有一种命令行方式来创建项目(不使用 AS):它记录在此处。
| 归档时间: |
|
| 查看次数: |
2730 次 |
| 最近记录: |