静态jar android,android自定义静态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

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文件中添加对动态库的声明;

如: 

android:name="android.net">

其次,在system/ect/permissions下添加android.net.xml配置文件,在配置文件中去声明jar包的路径

file="/system/framework/AAFramework.jar"/>

标签表示除了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包中。

这样可以实现分离,接口的定义和实现做到分离,在开发阶段非常有用,不同部门直接可以并行进行。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要新增自定义的framework框架层,可以按照以下步骤进行: 1. 创建自定义framework层的代码 在AOSP源码的framework目录下创建自定义模块的代码目录,例如创建一个名为myframework的模块,可以在framework目录下执行以下命令: ``` mkdir myframework ``` 在myframework目录下创建自定义的Java代码和native代码。 2. 添加Android.mk文件 在myframework目录下创建Android.mk文件,指定要编译的Java和native代码。例如,Android.mk文件可以含以下内容: ``` LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := myframework LOCAL_SRC_FILES := \ MyJavaClass.java \ MyCFile.c LOCAL_STATIC_LIBRARIES := libcutils liblog include $(BUILD_STATIC_JAVA_LIBRARY) include $(BUILD_SHARED_LIBRARY) ``` 其中,LOCAL_MODULE指定了模块的名称,LOCAL_SRC_FILES指定了要编译的Java和native代码文件,LOCAL_STATIC_LIBRARIES指定了需要链接的静态库。 3. 修改build/core/main.mk 在AOSP源码的build/core/main.mk文件中添加以下内容: ``` # Add myframework to the build ifeq ($(TARGET_BUILD_APPS),) $(error TARGET_BUILD_APPS must be set) endif ifeq ($(filter myframework,$(TARGET_BUILD_APPS)),myframework) $(call add-subdir-if-exists,frameworks/myframework) endif ``` 这样,编译系统就会将myframework模块添加到编译列表中。 4. 编译定义framework 执行以下命令编译定义framework: ``` make myframework ``` 编译完成后,会在out/target/common/obj/JAVA_LIBRARIES和out/target/product/<product>/system/framework目录下生成myframework.jar和service.jar文件,以及myframework.so和service.so库文件。 以上就是新增自定义framework框架层的步骤。需要注意的是,在修改AOSP源码时,应该遵循AOSP的开发规范,并在保证代码正确性的前提下进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值