在android中,编译的项目使用到第三方jar的导入方法 终极版!

1,在android系统环境中编译自己的项目时,往往会用到第三方jar包。这些jar包在eclipse中添加编译,一路畅通,因为eclipse已经帮助你配置好了。但是当把这个项目拷贝到系统环境中编译时,jar包就会不管用。下面是自己遇到的问题,通过查找网上的资料,遇到各种问题,最后终于解决。通过博客总结一下,给大家分享。

条件:例如:先在eclipse中开发的应用,用到support-v4包和第三方pinyin4j-2.5.0.jar。

移植到系统项目中,编译不通过。以系统的music应用为例。

1,首先之是加入Android.mk文件

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := optional

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

src/com/android/music/IMediaPlaybackService.aidl

LOCAL_PACKAGE_NAME := Music

LOCAL_PROGUARD_FLAG_FILES := proguard.flags

include $(BUILD_PACKAGE)

编译会找不到引用的包中相应的类和方法。

2,然后在声明包,在.mk中添加

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := optional

#声明包名

LOCAL_STATIC_JAVA_LIBRARIES := android-support-v4 pinyin4j-2.5.0

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

src/com/android/music/aidl/IMediaService.aidl

LOCAL_PACKAGE_NAME := Music

include $(BUILD_PACKAGE)

include $(CLEAR_VARS)

#指明包的位置

LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := pinyin4j-2.5.0:lib/pinyin4j-2.5.0.jar

include $(BUILD_MULTI_PREBUILT)

3,这时编译有可能还会报错。(...can‘t find superclass or interface...)

Warning: demo.Pinyin4jAppletDemo$1: can‘t find superclass or interface java.awt.event.WindowAdapter

Warning: demo.Pinyin4jAppletDemo$3: can‘t find superclass or interface java.awt.event.ActionListener

Warning: demo.Pinyin4jAppletDemo$2: can‘t find superclass or interface java.awt.event.ActionListener

Warning: demo.Pinyin4jAppletDemo: can‘t find superclass or interface javax.swing.JApplet

Warning: demo.Pinyin4jAppletDemo$1: can‘t find referenced class java.awt.event.WindowAdapter

Warning: demo.Pinyin4jAppletDemo$1: can‘t find referenced method ‘void stop()‘ in class demo.Pinyin4jAppletDemo

Warning: demo.Pinyin4jAppletDemo$1: can‘t find referenced method ‘void destroy()‘ in class demo.Pinyin4jAppletDemo

Warning: demo.Pinyin4jAppletDemo$1: can‘t find referenced class java.awt.event.WindowAdapter

Warning: demo.Pinyin4jAppletDemo$1: can‘t find referenced class java.awt.event.WindowEvent

Warning: demo.Pinyin4jAppletDemo$3: can‘t find referenced class javax.swing.JComboBox

Warning: demo.Pinyin4jAppletDemo$3: can‘t find referenced class javax.swing.JComboBox

这好像的混淆编译造成的错误,然后在应用的根目录下建立proguard.cfg这个文件,在里面输入:

-dontwarn demo.**

-keep class demo.** { *;}

查看编译报的错误,有几个包出错,就在里面加几个这样的声明。这里是有demo.下的java报错,只加这个就行。然后在Android.mk中添加此文件的标识。

LOCAL_PROGUARD_FLAG_FILES := proguard.cfg

然后在编译,应该就可以通过。

大功告成。。。

2,然后后来又用到另一个jar包,出现了新问题:以下是出现的warring:

Warning: org.opencv.android.CameraBridgeViewBase: can‘t find referenced class org.opencv.R$styleable

Warning: org.opencv.android.CameraBridgeViewBase: can‘t find referenced class org.opencv.R$styleable

Warning: org.opencv.android.CameraBridgeViewBase: can‘t find referenced class org.opencv.R

×××××

Warning: there were 3 unresolved references to classes or interfaces.

You may need to specify additional library jars (using ‘-libraryjars‘),

or perhaps the ‘-dontskipnonpubliclibraryclasses‘ option.

使用上面的方法就不管用。但是在proguard.cfg文件中添加一句这个就可以忽略warring。

-ignorewarnings

解决办法都是在网上找了,自己总结一下。谢谢各位在网上的分享。

时间: 2024-08-28 21:38:02

在android中,编译的项目使用到第三方jar的导入方法 终极版!的相关文章

MyEclipse中把java项目打包——含有第三方jar包【转】

在将项目打包为jar包时一直出现“ClassNotDefFound”错误,百度了很多解决办法都没有解决.最终找到一个很好的解决办法. 1.打包步骤 (1)右键单击java项目“gz10000……”,选择“Export”: (2)选择“java”——“Runable JAR file”,点击“next”: (3)选择你的main()函数的文件名,选择你的保存路径,选择“Package required…………JAR”,点击“Finished”. 2.总结 1)如果含有第三方jar包,在打包的时候应

在Eclipse中编译maven项目出的问题

在Eclipse中编译Maven项目,运行 jetty:run 指令的时候会出错,在 JRE选项卡中加入: -Dorg.mortbay.util.URI.charset=GBK-Xms512m -Xmx512m-XX:PermSize=128M 就没事了

Android下编译cocos2d-x项目报错 ***'AssetsManager.o'. Stop

具体错误提示: make: *** No rule to make target `***/extensions/AssetsManager/AssetsManager.cpp', needed by `obj/local/armeabi/objs/cocos_extension_static/AssetsManager/AssetsManager.o'.  Stop. 很头疼的问题,一时间无从下手,从网上搜索论坛,终于找到了大神的答案. 具体的解决办法如下: 删除projec.andriod 

MyEclipse中android 项目如何解决第三方jar无法关联源码的问题( The JAR of this class file belongs to container 'Android Private Libraries' which does not allow modifications to source attachments on its entries.)

若我们要为第三方jar(android-support-v4.jar)关联源码通常的做法是 右键项目 单击菜单Properties 单击菜单 Java Build Path 单击 Libraries 选项卡 单击展开 Android Private Libraries 单击展开 android-support-v4.jar 单击 Source attachment 再单击 右边的 Edit 选择源码路径 但是问题来了,我们在步骤8时会发现 edit 按钮是禁用的,这样我们就无法给jar选择源码路

【转】Android中引入第三方Jar包的方法(java.lang.NoClassDefFoundError解决办法)

原文网址:http://www.blogjava.net/anchor110/articles/355699.html 1.在工程下新建lib文件夹,将需要的第三方包拷贝进来.2.将引用的第三方包,添加进工作的build path.3.(关键的一步)将lib设为源文件夹.如果不设置,则程序编译可以通过,但运行的时候,会报: java.lang.NoClassDefFoundError # re: Android中引入第三方Jar包的方法(java.lang.NoClassDefFoundErro

如何在Eclipse中使用依赖项目(Required projects)代替jar

最近想看下spring的源码,下了源码后,搭建个简单的例子hellospring的web项目,采用工程依赖使用源码中的类.搭建好后启动tomcat报java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet错误.参考了下面文章. 在Eclipse中使用依赖项目(Required projects)替换jar的好处就是可以随时更改依赖项目中的代码,而在主项目中引用到最新的编译类.这种方式在D

Android中检查、监听电量和充电状态的方法

Android中检查.监听电量和充电状态的方法 这篇文章主要介绍了Android中检查.监听电量和充电状态的方法,如判断当前充电状态.监听充电状态的改变.判断当前剩余电量等,需要的朋友可以参考下 当你在更改后台更新频率来减少这些更新对电池寿命的影响时,检查当前电量和充电状态是一个好的开始. 电池寿命通过剩余电量和充电状态来影响应用更新的执行.当用交流电充电时,执行更新操作对设备的影响是微不足道的,所以在大多数案例里,你可以把更新频率调到最快.如果设备不在充电,降低更新频率可以帮助延长电池寿命.

十九、android中判断sim卡状态和读取联系人资料的方法

在写程序中,有时候可能需要获取sim卡中的一些联系人资料.在获取sim卡联系人前,我们一般会先判断sim卡状态,找到sim卡后再获取它的资料,如下代码我们可以读取sim卡中的联系人的一些信息. PhoneTest.java package com.android.test; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.datab

android中判断sim卡状态和读取联系人资料的方法

在写程序中,有时候可能需要获取sim卡中的一些联系人资料.在获取sim卡联系人前,我们一般会先判断sim卡状态,找到sim卡后再获取它的资料,如下代码我们可以读取sim卡中的联系人的一些信息. PhoneTest.java package com.android.test; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.datab