编译出来的apk里可以看到已经把第三方的jar的东西包进来了。
诡异的是,本人需要用android源码环境编译,jar放在lib下。
Android.mk如下(一切都是那么合理。。。)
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_STATIC_JAVA_LIBRARIES := foo
LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_PACKAGE_NAME := MyApp
include $(BUILD_PACKAGE)
##################################################
include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := foo:lib/third.jar
include $(BUILD_MULTI_PREBUILT)
mm 编译方式并不报错,但是编译出来的apk就是没有jar的东东,
apk装完运行自然达不到原来的效果。
郁闷死了,看了其他例子都是这么做的,百思不得其解,求大神指教!
30 个解决方案
#1
正所谓小鲁怡情,大鲁伤身,樯橹灰飞烟灭,下联就是什么百撕不得...
#2
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := foo:lib/third.jar
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := foo: third.jar
试一下
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := foo: third.jar
试一下
#3
这个不是原因,只不过你说的把jar放在代码根目录下了,一样的效果的,不过还是谢谢你!
#4
jar与你的源码环境有没有冲突,比如你的jar的功能、定义等源码中已经有啦
#5
是怪了。。。
你把LOCAL_MODULE_TAGS := optional加上试试。
把foo改成libfoo试试(照理没区别)
确定jar包在lib下面,不是libs吗?
只能瞎猜了。。。
你把LOCAL_MODULE_TAGS := optional加上试试。
把foo改成libfoo试试(照理没区别)
确定jar包在lib下面,不是libs吗?
只能瞎猜了。。。
#6
比较下adt插件环境与源码环境
#7
1. 你的 第三方库应该新建一个工程目录, 例如 thirds
2. thirds 应该就是你的第三方库prebuilt工程配置, Android.mk 怎么写你应该清楚
2. apk 的 Android.mk 脚本中除了你写的那些, 有没有加上如下一行:
include $(callall-makefiles-under,$(LOCAL_PATH))
这样才能保证能找到你第三方库位置, 从而copy
2. thirds 应该就是你的第三方库prebuilt工程配置, Android.mk 怎么写你应该清楚
2. apk 的 Android.mk 脚本中除了你写的那些, 有没有加上如下一行:
include $(callall-makefiles-under,$(LOCAL_PATH))
这样才能保证能找到你第三方库位置, 从而copy
#8
源码编译不会把jar文件打进APK压缩包,所以你要在mk文件中把jar文件复制到系统的lib目录中,并且还要build配置把该jar编入系统才可。
#9
好像系统的lib下只有so类型的库,jar库不会放在里边吧。。
求教。
求教。
#10
谢谢,不过你这种做法其实和我的是一样的,只不过由加了一级目录而已,
试过了没用的
#11
这个。。,看错了,把jar文件copy到系统framework目录下。
#12
好像是不会有 jar 文件, 应该是都被android处理过了, 转换成 dalvik 识别的字节码;
apk 的所有java代码最终都 集中到 classes.dex 这个文件
apk 的所有java代码最终都 集中到 classes.dex 这个文件
#13
这位仁兄说的对。
我仔细研究了一下。
编译apk的流程是这样的,先把资源res打包进去,
然后把java 代码用java正常编译工具编译成class文件组成的jar文件,
最后再用androi的特有的dx工具把classes.jar变成dex.
最后apk里就有res和dex组成。
由上,如果我们要用第三方的jar包(一般是由class文件构成的,我这个jar包里关键是还有res),源码的make好像默认支持不了啊。
我仔细研究了一下。
编译apk的流程是这样的,先把资源res打包进去,
然后把java 代码用java正常编译工具编译成class文件组成的jar文件,
最后再用androi的特有的dx工具把classes.jar变成dex.
最后apk里就有res和dex组成。
由上,如果我们要用第三方的jar包(一般是由class文件构成的,我这个jar包里关键是还有res),源码的make好像默认支持不了啊。
#14
对于包含资源文件的 jar, 请参考:
http://blog.csdn.net/arui319/article/details/8123396
http://tech.it168.com/a2012/0406/1334/000001334145.shtml
http://blog.csdn.net/arui319/article/details/8123396
http://tech.it168.com/a2012/0406/1334/000001334145.shtml
#15
你这两篇讲的是adt如何使用jar的,和我的主题如何用make使用无关 呵呵,谢谢!
#16
你就不能变通下?
最终编译不还是靠android提供的那些工具?
资源引用的机制还能脱离android?
需要的工程你不能不用adt创建?
最终编译不还是靠android提供的那些工具?
资源引用的机制还能脱离android?
需要的工程你不能不用adt创建?
#17
变通谁不会,用adt早就搞定了啊。
现在就是要用make。
继续等高人解答。
现在就是要用make。
继续等高人解答。
#18
我说的变通不是让你去用 ADT, 是指借用ADT的处理方式
算了, 等吧
算了, 等吧
#19
我看了一路的讨论,我之前编译的都是只编译自己写的工程文件,我还真没有加载过别人jar包!
#20
如果jar与源码有冲突,请问如何解决??
#21
是不是因为你虽然Android.mk文件中加了这个jar包,但代码里面并没有使用jar包里面的内容,被android编译的时候优化删掉了,遇到过这种情况,只要代码里用到就能在最后的apk中找到了
#22
我是这样写的mk文件,可以编译过的,你试下:
LOCAL_STATIC_JAVA_LIBRARIES := android-common com.android.emailcommon com.android.emailsync guava android-common-chips libphotoviewer
#LOCAL_STATIC_JAVA_LIBRARIES += android-support-v4
LOCAL_STATIC_JAVA_LIBRARIES += android-support-v7-gridlayout
LOCAL_STATIC_JAVA_LIBRARIES += android-support-v13
LOCAL_STATIC_JAVA_LIBRARIES += mylib #这个是我自己加的jar包名字,名字任意写
...
include $(BUILD_PACKAGE)
include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := mylib:libs/android-support-v4.jar #我要编译的jar包存放位置
include $(BUILD_MULTI_PREBUILT)
#23
求解 球高人 谢谢
#24
1、初步判断不是第三方jar的问题,一般来说jar没打包进去程序会运行报错
这个可以反编译apk确定是否有打包进去
2、达不到原来的效果,这个应该指的是UI上的效果吧
eclipse和源码编译是有不同的,尤其有些UI上样式是不一样的
这个可以反编译apk确定是否有打包进去
2、达不到原来的效果,这个应该指的是UI上的效果吧
eclipse和源码编译是有不同的,尤其有些UI上样式是不一样的
#25
我也碰到同样的问题,要如何解决,能否共享下
#26
LOCAL_PROGUARD_ENABLED := disabled
#27
我的这个方法是经过验证的:LOCAL_PROGUARD_ENABLED := disabled ,肯定是这个原因
#28
你看能不能把这个jar单独编译成dex,,拷贝到一个目录,将这个路径加到系统CLASSPATH环境变量中,这样apk应该能调用到
#29
解没解决?楼主
#30
给你的jar包配置一个make文件 。在你的apk里面写入LOCAL_REQUIRED_MODULES :=XXX.jar 即可。
#1
正所谓小鲁怡情,大鲁伤身,樯橹灰飞烟灭,下联就是什么百撕不得...
#2
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := foo:lib/third.jar
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := foo: third.jar
试一下
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := foo: third.jar
试一下
#3
这个不是原因,只不过你说的把jar放在代码根目录下了,一样的效果的,不过还是谢谢你!
#4
jar与你的源码环境有没有冲突,比如你的jar的功能、定义等源码中已经有啦
#5
是怪了。。。
你把LOCAL_MODULE_TAGS := optional加上试试。
把foo改成libfoo试试(照理没区别)
确定jar包在lib下面,不是libs吗?
只能瞎猜了。。。
你把LOCAL_MODULE_TAGS := optional加上试试。
把foo改成libfoo试试(照理没区别)
确定jar包在lib下面,不是libs吗?
只能瞎猜了。。。
#6
比较下adt插件环境与源码环境
#7
1. 你的 第三方库应该新建一个工程目录, 例如 thirds
2. thirds 应该就是你的第三方库prebuilt工程配置, Android.mk 怎么写你应该清楚
2. apk 的 Android.mk 脚本中除了你写的那些, 有没有加上如下一行:
include $(callall-makefiles-under,$(LOCAL_PATH))
这样才能保证能找到你第三方库位置, 从而copy
2. thirds 应该就是你的第三方库prebuilt工程配置, Android.mk 怎么写你应该清楚
2. apk 的 Android.mk 脚本中除了你写的那些, 有没有加上如下一行:
include $(callall-makefiles-under,$(LOCAL_PATH))
这样才能保证能找到你第三方库位置, 从而copy
#8
源码编译不会把jar文件打进APK压缩包,所以你要在mk文件中把jar文件复制到系统的lib目录中,并且还要build配置把该jar编入系统才可。
#9
好像系统的lib下只有so类型的库,jar库不会放在里边吧。。
求教。
求教。
#10
谢谢,不过你这种做法其实和我的是一样的,只不过由加了一级目录而已,
试过了没用的
#11
这个。。,看错了,把jar文件copy到系统framework目录下。
#12
好像是不会有 jar 文件, 应该是都被android处理过了, 转换成 dalvik 识别的字节码;
apk 的所有java代码最终都 集中到 classes.dex 这个文件
apk 的所有java代码最终都 集中到 classes.dex 这个文件
#13
这位仁兄说的对。
我仔细研究了一下。
编译apk的流程是这样的,先把资源res打包进去,
然后把java 代码用java正常编译工具编译成class文件组成的jar文件,
最后再用androi的特有的dx工具把classes.jar变成dex.
最后apk里就有res和dex组成。
由上,如果我们要用第三方的jar包(一般是由class文件构成的,我这个jar包里关键是还有res),源码的make好像默认支持不了啊。
我仔细研究了一下。
编译apk的流程是这样的,先把资源res打包进去,
然后把java 代码用java正常编译工具编译成class文件组成的jar文件,
最后再用androi的特有的dx工具把classes.jar变成dex.
最后apk里就有res和dex组成。
由上,如果我们要用第三方的jar包(一般是由class文件构成的,我这个jar包里关键是还有res),源码的make好像默认支持不了啊。
#14
对于包含资源文件的 jar, 请参考:
http://blog.csdn.net/arui319/article/details/8123396
http://tech.it168.com/a2012/0406/1334/000001334145.shtml
http://blog.csdn.net/arui319/article/details/8123396
http://tech.it168.com/a2012/0406/1334/000001334145.shtml
#15
你这两篇讲的是adt如何使用jar的,和我的主题如何用make使用无关 呵呵,谢谢!
#16
你就不能变通下?
最终编译不还是靠android提供的那些工具?
资源引用的机制还能脱离android?
需要的工程你不能不用adt创建?
最终编译不还是靠android提供的那些工具?
资源引用的机制还能脱离android?
需要的工程你不能不用adt创建?
#17
变通谁不会,用adt早就搞定了啊。
现在就是要用make。
继续等高人解答。
现在就是要用make。
继续等高人解答。
#18
我说的变通不是让你去用 ADT, 是指借用ADT的处理方式
算了, 等吧
算了, 等吧
#19
我看了一路的讨论,我之前编译的都是只编译自己写的工程文件,我还真没有加载过别人jar包!
#20
如果jar与源码有冲突,请问如何解决??
#21
是不是因为你虽然Android.mk文件中加了这个jar包,但代码里面并没有使用jar包里面的内容,被android编译的时候优化删掉了,遇到过这种情况,只要代码里用到就能在最后的apk中找到了
#22
我是这样写的mk文件,可以编译过的,你试下:
LOCAL_STATIC_JAVA_LIBRARIES := android-common com.android.emailcommon com.android.emailsync guava android-common-chips libphotoviewer
#LOCAL_STATIC_JAVA_LIBRARIES += android-support-v4
LOCAL_STATIC_JAVA_LIBRARIES += android-support-v7-gridlayout
LOCAL_STATIC_JAVA_LIBRARIES += android-support-v13
LOCAL_STATIC_JAVA_LIBRARIES += mylib #这个是我自己加的jar包名字,名字任意写
...
include $(BUILD_PACKAGE)
include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := mylib:libs/android-support-v4.jar #我要编译的jar包存放位置
include $(BUILD_MULTI_PREBUILT)
#23
求解 球高人 谢谢
#24
1、初步判断不是第三方jar的问题,一般来说jar没打包进去程序会运行报错
这个可以反编译apk确定是否有打包进去
2、达不到原来的效果,这个应该指的是UI上的效果吧
eclipse和源码编译是有不同的,尤其有些UI上样式是不一样的
这个可以反编译apk确定是否有打包进去
2、达不到原来的效果,这个应该指的是UI上的效果吧
eclipse和源码编译是有不同的,尤其有些UI上样式是不一样的
#25
我也碰到同样的问题,要如何解决,能否共享下
#26
LOCAL_PROGUARD_ENABLED := disabled
#27
我的这个方法是经过验证的:LOCAL_PROGUARD_ENABLED := disabled ,肯定是这个原因
#28
你看能不能把这个jar单独编译成dex,,拷贝到一个目录,将这个路径加到系统CLASSPATH环境变量中,这样apk应该能调用到
#29
解没解决?楼主
#30
给你的jar包配置一个make文件 。在你的apk里面写入LOCAL_REQUIRED_MODULES :=XXX.jar 即可。