1 媒介
之前工作中,许多时候要搞一个简单的app去验证底层功能,Android studio又过于重型,之前用gradle,被版本匹配和下载外网包折腾的堪称噩梦。所以搞app都只有找应用的同事帮忙。不绝想知道一些简单的app怎么能手搓一下,简单快速的搞出来。趁着如今偶然间,终于体验了一把。
我的环境是windows10,终端装备没有用虚拟机,用了一个安卓平板,荣耀平板5。
2 代码结构
代码架构如下:
此中要本身写的就是两个文件,MainActivity.java和AndroidManifest.xml。如下:
MainActivity.java
- package com.example.simpleapp;
- import android.app.Activity;
- import android.os.Bundle;
- import android.widget.TextView;
- public class MainActivity extends Activity {
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- TextView tv = new TextView(this);
- tv.setText("Hello, Android!");
- setContentView(tv);
- }
- }
复制代码 AndroidManifest.xml
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.example.simpleapp"
- android:versionCode="1"
- android:versionName="1.0">
-
- <application android:label="SimpleApp">
- <activity android:name=".MainActivity">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- </application>
- </manifest>
复制代码 关于这个文件,简单的先容如下:
`AndroidManifest.xml` 是 Android 应用开发中的焦点配置文件,为体系和开发者提供应用的关键信息,以下是扼要先容:
1. **基本信息声明** - 界说应用包名,作为应用唯一标识。 - 包含版本号,`versionCode` 供体系识别版本新旧,`versionName` 面向用户展示。
2. **组件声明** - **Activity**:代表应用界面,可设置为启动界面。 - **Service**:用于后台长时间运行任务。 - **Broadcast Receiver**:吸收体系或应用广播消息。 - **Content Provider**:实现差别应用间的数据共享。
3. **权限声明**:列出应用正常运行所需权限,部门伤害权限需运行时动态哀求。
4. **其他配置** - 配置应用图标、名称、主题,决定应用外观展示。 - 声明应用对硬件特性和 Android 体系版本的要求。
3 环境配置
之后就是要配置一大堆组件了。
此中platform-tools,cmdline-tools,jdk-23.0.1都要本身下载,前面两个可以去安卓官网下,jdk去甲骨文网站下。Adnroid_SDK可以用过cmdline-tools里面的sdkmanager.bat自动下载。
platform-tools里面告急是adb,fastboot这些工具。
cmdline-tools告急就是开发中的工具,是一堆bat文件。sdkmanager管理SDK的,avdmanager管理虚拟机的,lint是代码静态查抄,apkanalyzer是APK文件分析。
撸apk,告急要用sdkmanager。利用list命令可以看如今可以下载哪些。
- sdkmanager --list --sdk_root=D:\Tools\Adnroid_SDK
复制代码 先安装build tool
- sdkmanager --install "build-tools;35.0.0"
复制代码
我的目标装备是荣耀平板5,很老的一个7寸平板。看了一下装备的OS是Android9, Android9对应的SDK版本是28,安装的命令是:
- sdkmanager --install "platforms;android-28" --sdk_root=D:\Tools\Adnroid_SDK
复制代码 之后就是设置环境变量,告急是ANDROID_HOME,JAVA_HOME,然后jdk的bin,build-tools,platform-tools这几个都要加到PATH之中。
4 操作步骤
然后就可以开撸。
4.1 编译java文件
首先是编译java文件
- javac -d bin -classpath "D:\Tools\Adnroid_SDK\platforms\android-28\android.jar" src/com/example/simpleapp/MainActivity.java
复制代码 之后会在bin下面天生com/example/simpleapp/MainActivity.class。
4.2 天生dex
然后天生classes.dex,输入就是上一步的class文件。
- d8 --output=out/ bin/com/example/simpleapp/MainActivity.class
复制代码 之后会在out下天生classes.dex。看了一下先容,安卓的虚拟机的字节码是DEX bytecode,和一样平常的虚拟机还有差别,所以这里要处置处罚下。
d8: This tool is the DEX compiler. It takes Java bytecode (.class files) and converts it into DEX bytecode (.dex files), which is what the Android Runtime (ART) executes.
4.3 天生apk
之后利用aapt天生apk,这一步的输入参数就是谁人AndroidManifest.xml,还有Android9的运行库jar。
- aapt package -f -m -F out/app.unsigned.apk -M AndroidManifest.xml -I D:\Tools\Adnroid_SDK\platforms\android-28\android.jar
复制代码 此时会天生一个基础的app.unsigned.apk。
然后将之前的class.dex加到apk之中。这里貌似直接用zip拖进去也行。。
- aapt add out/app.unsigned.apk out/classes.dex
复制代码 aapt (Android Asset Packaging Tool): This tool is used to package resources (like layouts, images, and strings) into a compiled format that Android can understand. It also handles the creation of the resources.arsc file and the AndroidManifest.xml processing.
apk本质着实就是一个zip文件,可以直接用winrar打开,此时内容如下:
有的先容说要对齐一下。但是我没对齐也可以的。
- zipalign -v 4 build/apk/app-debug-unaligned.apk build/apk/app-debug.apk
复制代码
4.4 署名
最后就是署名,这一步感觉倒是挺无聊的。但是不署名,确实无法安装:
署名的步骤如下:
- keytool -genkey -v -keystore my-release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias my-key
- apksigner sign --ks my-release-key.jks --out out/app.signed.apk out/app.unsigned.apk
复制代码 签完名,apk里面会多一个META-INF文件夹。
(2/11更新:署名的作用是确保apk发布可信,本身调试确实无所谓,告急是包管发布在Google Play之类的应用市肆可信)
最后的文件大小大概是8k,不是我吹牛,这么小的安卓app绝对堪称罕见中的罕见了。。
5 运行
之后就是推送APK。当然,之前要进入开发者模式,然后把usb调试打开。
- adb install out/app.signed.apk
复制代码 然后就提示是否安装:
(这个图是另一个实行的app)
之后会提示说有一些东西太老之类的,但是可以看到期待的画面了。
6 参考和其他
最后,谷歌官方是很不推荐这种做法,推荐用Android Studio和Gradle,来由如下:
Important Considerations
Complexity: This process is very manual and error-prone.
Maintenance: Maintaining a project built this way is extremely difficult.
Features: You're missing out on all the features and optimizations that Gradle provides.
Dependencies: Managing dependencies manually would be a nightmare.
Android Studio: Android Studio and Gradle are designed to make Android development much easier.
Android SDK: You need to have the Android SDK installed and configured correctly.
Environment Variables: You need to set the ANDROID_HOME environment variable.
Missing files: You need to create the res directory and the strings.xml file.
Conclusion
While you can technically create a very simple Android 9 APK using aapt and d8 directly, it's strongly discouraged for anything beyond experimentation or very specific edge cases. Gradle is the standard build system for Android, and it provides a much more robust, efficient, and maintainable way to develop Android apps. I highly recommend using Gradle unless you have a very compelling reason not to.
之前倒是写过一个Gardle的文,但是很简单,也没有涉及到apk这一层。可以看看:Android学习18 -- Gradle_resourcehashescache.bin-CSDN博客
参考:
ChatGPT和Gemini
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |