如何将自己的项目编译到Android系统中,成为应用程序

1、下载Android系统的源码包(不同手机用的不一样,根据自己的情况合理下载,这不做介绍)

2、解压下载下来的源码包(若是.tar.gz文件,解压方式如下)

    tar -xzvf 文件名

3、在解压包的alps/packages/apps下面新建一个文件夹 ***(项目名),将自己的项目的里面的main文件下的数据复制出来放在新建的文件夹下,并将java文件名改为src,最重要的一点是新建一个Android.mk文件,这个文件必须要有,可参照apps/下面的项目里面的.mk编写,最简单的编写是如下:

LOCAL_PATH:= $(call my-dir)    //Android.mk文件和项目文件在同一个文件里可以这样写

include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := optional

LOCAL_SRC_FILES := $(call all-java-files-under, src)

LOCAL_PACKAGE_NAME := 项目名

include $(BUILD_PACKAGE)

 

4、编译整个工程

./oneCmdMake  系统项目名  userdebug       //这里可以是userdebug、eng、user

 

5、单一模块编译

./moduleMake userdebug mmm packages/apps/项目名      //注意,这里的编译选项必须一致,不然后面很麻烦

 

如果编译成功就可以开始刷机了,编译不成功就看error是怎么提示的,如果刷机后,手机上面没有你的项目,就执行  ./moduleMake userdebug snod

再次刷机,一般这样就可以了

 

 

整个工程编译成功后以后就不需要在整体编译了,整体编译是一个特别耗时的操作,一般是一个小时左右,但是单一模块编译是很快的,如果以后还需要将自己的项目预置到这个系统中(已经整体编译成功的),只需直接单一模块编译,并用snod进行打包就可以了,这是我认为比较节省时间的方法,另一种方法是将自己的项目名配置到系统配置文件device.mk里面,仿照***PACKAGES+=项目名,再整体编译一次,就不需要打包了。

 

 

 

模块编译(快速将修改过后的项目push到手机上)

               source build/envsetup.sh    # source是用来运行shell脚本的,envsetup.sh里面有mm mmm mmmb等一系列可用的命令,但只有运行了该脚本,里面的命令才能使用
               lunch +平台名                    #加载平台,这可名字可以在out/target/下面看,例如:正确的情况下是没有generic文件夹的

                                               

 

               mmm -B  项目名      #编译修改过后的项目,-B 可有可无,这里的项目名要对应所在的路径,编译模块的所有文件,需要-B选项,不加-B 则只编译发生改变的文件

               adb root                   #获得手机的root权限

               adb remount            #挂载手机

               adb push  该项目生成的 .apk 和 .odex文件的位置             对应手机里面的位置            #把修改并编译后生成的push 到手机中

               adb shell reboot             #重启手机

 对于不能remount的手机,就不能push,可以mmm单一编译后打包make -j16 snod(直接使用),再刷机,选中system下载到手机,可以省很多的时间

 

阿里最近更新代码后, root 后无法remount需要使用的要做以下处理:
adb root 之后,进到adb shell 里。执行命令 echo "enable 0;" > /proc/alog 然后就可以了。

 

 

注:当不确定自己是否push成功的情况下,可以到手机的目录下面去看对应文件的修改时间,如

ls -l Utk.apk  结果会显示文件的修改时间和权限,权限是666时,才正确,时间为你push的时间

 

m:编译所有的模块 
mm:编译当前目录下的模块,当前目录下要有Android.mk文件 
mmm:编译指定路径下的模块,指定路径下要有Android.mk文件

 

 

eng:工程版本

user:最终用户版本

userdebug:调试测试版本

tests:测试版本

一般而言,tests和userdebug两个版本是不能交付给最终用户的。

 

 

犯过的错误及最后的修改:

1、整体编译的时候用的是userdebug,单一模块用的是eng,编译的时候没有注意到,后面改成一样的了能生成oat文件了。
2、自己的游戏项目里面继承是AppCompatActivity,不能被识别,可能是因为包或版本的原因,最后统一改成了Activity.
3、用./moduleMake userdebug mmmb 改成了./moduleMake userdebug snod编译单一模块并打包就成功了

4、注释尽量不出现中文,布局里面的text内容最好写在string.xml中,再去调用

5、./birdCopy 6118SOP_V17_AY_HD_MV1616 userdebug
     ./mk_aliphone.sh bird_6737m_35g_m0 userdebug adb new YUNOS_CARRIER_CUSTOM=CMCC_DEEP_COOP

这是对于阿里平台的编译,new是每次整体编译都会清掉原来编译过的数据,如果为了编译时间短,可以不要new改成remake

提高代码的编译速度可参照http://blog.csdn.net/cscrazybing/article/details/50789482

原文地址:https://www.cnblogs.com/xhf-wonder/p/6842925.html