如何在没有Gradle的情况下在命令行上构建Android apk?

p1iqtdky  于 2023-05-18  发布在  Android
关注(0)|答案(4)|浏览(198)

我写了一个Android应用程序,它不使用任何依赖项或模块,只有一个Activity和一个布局文件。
如何在不使用Gradle(或其他“构建系统”或“依赖项管理”软件)的情况下在命令行上构建应用的apk文件?

zynd9foi

zynd9foi1#

如果您不想使用ant/gralde构建,请使用以下步骤手动构建您的apk。但是你必须至少安装Android SDK。

  • aapt创建R.java
  • 使用javac将所有java源代码编译为*.class
  • 使用d8(或旧版SDK中的dx)将所有*.class转换为dex文件,例如输出为classes.dex
  • 从资产、资源和AndroidManfiest.mk创建APK的初始版本,例如输出为MyApplication.apk.unaligned
  • 使用aapt将步骤3中生成的classes.dex添加到MyApplication.apk.unaligned
  • 使用jarsigner使用debug或release密钥对MyApplication.apk.unaligned进行签名
  • 使用zipalign对齐最终APK,例如,如果使用发布密钥签名,则输出为MyApplication-debug.apkMyApplication-release.apk
  • 搞定

我已经创建了一个示例脚本来完成上述所有工作,请参阅here
实际上,一些文章已经讨论了这个主题,请参阅以下链接。
https://www.apriorit.com/dev-blog/233-how-to-build-apk-file-from-command-line
https://spin.atomicobject.com/2011/08/22/building-android-application-bundles-apks-by-hand/

am46iovg

am46iovg2#

尝试从命令行使用支持库构建应用程序。https://github.com/HemanthJabalpuri/AndroidExplorer

rta7y2nd

rta7y2nd3#

alijandro给出了完美的答案。我设法编写了简单的ANT脚本,它使用AdMob构建生产APK,而不使用gradle。一些有用的评论:

1.如果你想混淆类,你必须jar编译好的类(在javacdx步骤之间),然后运行proguard

  • 对于AdMob,您必须从zip压缩文件中提取以下jar文件(如C:\Users\<User>\AppData\Local\Android\sdk\extras\google\m2repository\com\google\android\gms\play-services-ads\10.2.6\play-services-ads-10.2.6.aar):
  • play-services-ads-10.2.6.jar
  • play-services-ads-lite-10.2.6.jar
  • play-services-base-10.2.6.jar
  • play-services-basement-10.2.6.jar
  • play-services-clearcut-10.2.6.jar
  • play-services-gass-10.2.6.jar
  • play-services-tasks-10.2.6.jar

这些归档文件应在javacdx中传递
1.对于AdMob,还有几个额外的简单配置步骤
Gradle在android项目中做了很多混乱的事情,所以自己的脚本看起来像是要投入生产的项目的单一解决方案。

yyhrrdl8

yyhrrdl84#

不久前,我在对Android Studio和Gradle感到沮丧后偶然发现了这个线程。受到alijandrothis template from authmane512的答案的启发,我编写了一系列脚本来编译Java或Kotlin中的Android应用程序(包括依赖项/包),而无需任何外部构建系统。
链接:https://github.com/jbendtsen/tiny-android-template
这里涉及到一点DIY,但考虑到这是像Gradle这样的东西会为你做的事情,我认为知道它是有用的。此外,它就像 wayyyy 不那么慢,你有更多的控制你的应用程序如何组装。

相关问题