android代码打包
㈠ android 项目如何打包成jar 使用
第一步,把普通的android project设置成库项目
库项目也是一个标准的android项目,因此你先创建一个普通的android项目。 这个项目可以起任何的名称,任何的报名,设置其他需要设置的字段等,如图1所示。
接着把项目设置成库项目,步骤如下
在Package Explorer中, 鼠标右键项目文件夹,点击 Properties.
在Properties 窗口, 选择"Android" ,Library属性显示在右下边.
把"is Library" 单选框选择上,再点击 Apply.(比如http://www.tiecou.com/)
点击 OK 关闭Properties 窗口.
这时,这个项目就变成库项目了。
当然,java项目也可以让其变成一个库项目,非常简单,执行上面的四步。其他程序项目就可以引用库项目了。
图 1.使一个项目为库项目
创建manifest文件
一个库项目的manifest文件也和标准的android应用程序一样,声明所有共享的组件。
比如APIDemo中的TicTacToeLib 这个例子,库项目声明了Activity GameActivity:
<manifest>
...
<application>
...
<activity android:name="GameActivity" />
...
</application>
</manifest>
第二步 引用库项目
如果你开发的应用程序想要包括库项目中的代码和资源,非常简单,引用步骤如下
在Package Explorer中, 鼠标右键项目文件夹,点击 Properties.
在Properties 窗口, 选择"Android" ,Library属性显示在右下边.
点击Add ,打开了Project Selection对话框.
从可用库项目列表选择一个项目,然后点击 OK.
对话框关闭之后点击 Apply (在Properties窗口).
点击 OK 关闭Properties 窗口.
完成以上六步,Eclipse 会重建项目,把库项目中的内容包含进去。 如图2所示
图 2.让项目引用一个库项目
如果你想增加多个库项目的引用,使用up和down可以设置他们的相对的优先级和合并顺序。工具在合并引用的库的时候顺序是从低优先级(列表的下面)到高优先级(列表的上面)。 如果不只一个库定义了相同的资源ID,这个工具选择资源时会选择高优先级的资源。应用程序自身拥有最高的优先级,自身的资源zThe application itself has highest priority and its resources are always used in preference to identical resource IDs defined in libraries.
在menifest文件中声明库中的组件
在manifest文件中必须增加对在当前程序中用到的库项目中的所有的组件。比如,你必须声明任何用到的 <activity>, <service>, <receiver>, <provider>等,<permission>, <uses-library>,和其他类似的元素。
声明库项目中的组件时,必须使用包含包名的类全名。
在TicTacToeMain例子中,声明库Activity GameActivity :
<manifest>
...
<application>
...
<activity android:name="com.example.android.tictactoe.library.GameActivity" />
...
</application>
</manifest>
㈡ 如何运行打包的android源代码文件
android源码目录下的build/envsetup.sh文件,描述编译的命令
-
m:
makes
from
the
top
of
the
tree.
-
mm:
builds
all
of
the
moles
in
the
current
directory.
-
mmm:
builds
all
of
the
moles
in
the
supplied
directories.
要想使用这些命令,首先需要在android源码根目录执行.
build/envsetup.sh
脚本设置环境
m:编译所有的模块
mm:编译当前目录下的模块,当前目录下要有android.mk文件
mmm:编译指定路径下的模块,指定路径下要有android.mk文件
下面举个例子说明,假设我要编译android下的\hardware\libhardware_legacy\power模块,当前目录为源码根目录,方法如下:
1、.
build/envsetup.sh
2、mmm
hardware/libhardware_legacy/power/
编译完后
运行
make
snod
会重新将你改过的模块打入到system.img中
㈢ Android编译打包的过程
本文所有内容都是通过网文加自己的实践得出的结论,没有找到官方参考书目,因此若有错误之处,欢迎指出。
(Android Asset Packaging Tool)编译和打包资源的工具
其中.class为字节码的形式,用Intellj可以直接反编译打开,看到其中的内容,发现相比于.java文件,已经做了一定的优化
apk文件分析
```
! ( https://upload-images.jianshu.io/upload_images/15623627-f005f457fce3005a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240 )
res中的xml文件也被编译成了二进制,名字也发生了改变(混淆),但其中的png内容都是可以直接打开的。
! ( https://upload-images.jianshu.io/upload_images/15623627-2caf2a33ed808efb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240 )