天使漫步IT工作室

彻底理解Android编译过程 - 脱离IDE开发Android-APP


前言
笔者从事了几年的android开发,对android-app开发略有些心得,但是从未尝试过脱离IDE开发过 Android程序,故此翻阅了一些材料,才发现stackoverflow上有不错的一些资料。特此尝试翻译过来,一来希望可以帮助到初学者,二来笔者发现脱离了IDE开发 Android程序有助于理解其编译打包的过程。其过程就如用记事本写C语言程序,然后在拥有C编译环境下编译出目标(.o)文件,然后连接库成为一个完成的exe可执行文件。

开发步骤

1.环境要求及工具列表

本案例中假定使用的是linux环境,如果不是linux环境,请自行配置命令行环境。如:window中需要把工具路径配置到系统变量中。

2.安装Android SDK并运行(如果已经对SDK很熟悉或者已经有相关的环境变量,请直接跳过第二步)

将SDK管理器压缩包解压以后,进行如下步骤:

ps:JDK和SDK代表着你存放JDK和SDK的路径。

启动以后可以使用体验下里面的功能。

3.APP代码开发

在SayingHello文件中输入以下内容:

     package dom.domain;
     import android.widget.TextView;

     public final class SayingHello extends android.app.Activity
     {
         public void onCreate( final android.os.Bundle activityState )
         {
             super.onCreate( activityState );
             final TextView textV = new TextView( SayingHello.this );
             textV.setText( "Hello world" );
             setContentView( textV );
         }
     }

输入以下内容:

     <?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>

先放着为空,等需要资源的时候再放进去。

编译工程代码

    aapt package -f \
    -I SDK/platforms/android-API/android.jar \
    -J src -m \
    -M AndroidManifest.xml -S res -v

其中SDK为自己的SDK路径,如:xxx/android/ 结果就为:xxx/android/platforms/android-API/android.jar

因为咱们的示例很简单,对于android来说资源文件是可选的,所以以上的命令并没有生成实质的资源,也就是空的。

**关于aapt命令,可以自行查找官方文档,这里推荐文章:
http://blog.csdn.net/androidzhaoxiaogang/article/details/8246713**

至此,咱们已经将java文件编译,生成所需的dex文件

在以上的步骤中,你可以使用Jack 工具直接将.java编译转换为.dex文件,即一步完成。但是官方并没有推荐这个方法,因为javac使用上更加广泛而且有很好的文档社区支持

经过以上的步骤,我们到的了apk文件的资源文件部分,即app.apkPart。

但是,这里会产生一个警告:THIS TOOL IS DEPRECATED. See --help for more information.,如果使用--help失败,而且异常是ArrayIndexOutOfBoundsException,那么可以一下命令:

     java -classpath SDK/tools/lib/sdklib.jar \
       com.android.sdklib.build.ApkBuilderMain

这里看到,第二行的时候是没有参数的。

网上有文章说使用ApkBuilderMain过时了,应该直接使用ApkBuilder命令。

至此,咱们已经得到了一个未经前面但是已经可以运行的apk,也就是可以直接安装运行啦。

apk安装与运行

如果顺利,这个程序将会打印一个hello world到屏幕上。

至此,咱们已经完成了脱离IDE开发android app的目的。整个过程并没有使用高大上的IDE环境,而是直接使用记事本进行代码书写,用系统的工具来编译、转换、打包最后得到apk程序。

当前页面是本站的「Baidu MIP」版。查看和发表评论请点击:完整版 »