用反射访问第三方的jar文件

需求:引入第三方的jar 包,但是只编译进中国的产品中,国外的产品不能有这个jar文件。

因为所有产品的代码都是一套,如果直接import 第三方API的话,会导致某些产品编译不通过,所以只有采用反射的方式比较合适。


1,编写Android.mk文件

# ============================================================
# Copy the lib (yellowpage-services.jar) to /system/framework
# ============================================================
include $(CLEAR_VARS)
LOCAL_MODULE := yellowpage-services.jar
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := ETC
LOCAL_MODULE_PATH := $(TARGET_OUT_JAVA_LIBRARIES)
LOCAL_SRC_FILES := $(LOCAL_MODULE)
LOCAL_REQUIRED_MODULES := yellowpageAPI.xml
include $(BUILD_PREBUILT)


# ============================================================
# Install the permissions file into system/etc/permissions
# ============================================================
include $(CLEAR_VARS)
LOCAL_MODULE := yellowpageAPI.xml
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := ETC
LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/permissions
LOCAL_SRC_FILES := $(LOCAL_MODULE)
include $(BUILD_PREBUILT)


yellowpageAPI.xml:

<permissions>
    <library name="yellowpage-services"
            file="/system/framework/yellowpage-services.jar" />
</permissions>


在使用此jar包的工程的AndroidManifest.xml添加:

<uses-libraryandroid:name="yellowpage-services"android:required="false"/>


这是我在做一个集成第三方(jar,apk)实际例子。碰到的问题:

1,按照上面的Android.mk,使用反射的时候,一直报找不到第三方的类的exception。检查发现在/system/framework和/system/etc/perssiom也有jar和xml文件。

后来发现反射需要使用Classes.dex,而第三方给的jar中没有,后来加进去后就行了。因为Android的虚拟机Dalvik vm不能像java的虚拟机一样动态识别jar中的byte code。所以需要执行dx --dex --output="classes.dex" ./yellowpage-services.jar,得倒classes.dex文件,然后执行aapt add yellowpage-services.jar classes.dex,把classes.dex加入到yellowpage-services.jar

2,用反射的时候,出现了OOM, 解决的办法是把Class.forName("***")放到static{}中,只调用一次

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值