有时候需要将自己定义的类打包成jar包供其它地方调用,有两种方式
一、做成静态jar包,Android.mk的写法
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_MODULE := AAFramework
include $(BUILD_STATIC_JAVA_LIBRARY)
一般做法是创建src目录,在src按需要添加的类的包名形式一级一级创建目录,然后把需要做成jar的类放到对应位置;
需要使用静态jar包的地方,只需要在编译的Android.mk中添加 LOCAL_STATIC_JAVA_LIBRARIES := SkyFramework
做静态依赖即可;静态jar包会被打包进需要使用的apk或者plugin插件中,使用静态jar的缺点,每次修改完静态jar涉及
的类的相关内容以后,需要使用的apk或plugin插件也需要重新编译打包才可,debug起来会比较费事;另外,如果有
几处都使用此静态jar包的话,容易产生jar包内容的重复,jar包内容过大时占用空间变大。
二、做成动态jar包,Android.mk写法
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_MODULE := AAFramework
ALL_DEFAULT_INSTALLED_MODULES += $(LOCAL_MODULE)
LOCAL_PROGUARD_ENABLED := disabled
LOCAL_DEX_PREOPT := false
include $(BUILD_JAVA_LIBRARY)
做法和静态jar包做法,只有一处不同,就是最后一句的声明的生成的是动态库;
使用的时候有两种方法:
1、使用的时候在去动态加载;
首先,在apk的AndroidMainfest.xml文件中添加对动态库的声明;
如: <application
<uses-library
android:name="android.net">
</uses-library>
</application>
其次,在system/ect/permissions下添加android.net.xml配置文件,在配置文件中去声明jar包的路径
<?xml version="1.0" encoding="utf-8"?>
<permissions>
<library name="android.net"
file="/system/framework/AAFramework.jar"/>
</permissions>
标签<library>表示除了framework中的动态库以外,系统将为应用自动加载的动态库;
最后,只要在相应的system/framework目录下存在SkyFramework.jar即可
2、像系统自动加载framework.jar包一样,开机时候默认加载
做法:Android5.0上是在build/target/product的core_minimal.mk中添加到
PRODUCT_BOOT_JARS := \
AAFramework
开机的时候会默认加载此动态jar包
注:如果加载完成没有生效,提示classNotFind的话,需要去echo export $BOOTCLASSPATH,看下环境变量有没加进来,如果确认有加进来,但是还是报错的话,去手动清除一下data,看下会不会ok。我这边添加的时候一直报类找不到,最后手动清除data后才会正常,不知道是不是android5.0的bug,同事在android4.4上就没有遇到,但在android5.1上也有此问题。
动态jar包的使用的时候
a、可以在apk的Android.mk中去添加动态jar包的依赖,使用的时候jar包的类可以直接调用
b、apk编译的时候如果不在android.mk中做动态jar包的依赖的话,可以在使用的时候去动态寻找system/framework/SkyFramework的jar包,去load此jar包,在去找jar包中的 class;这种方法 apk中可以直接调用接口中自己定义的方法,编译时不需要去做android.mk的依赖。 实现的地方直接继承接口即可,打包到动态jar包中。
这样可以实现分离,接口的定义和实现做到分离,在开发阶段非常有用,不同部门直接可以并行进行。
---------------------
原文:https://blog.csdn.net/bukker/article/details/51672506