这是一个很长的故事,但我真的很感激任何帮助。
我正在windows下使用eclipse构建一个Android应用程序。该应用程序包含一个应用程序(我们称之为App
)项目和两个库项目(让我们称之为libA
和libB
)。
libB
项目仅包含java代码(和android资源)。它引用了libA
项目,该项目包含很少的java类,许多C ++类和用于使用Swig
生成的本机C ++类的java包装器。
反过来,App
项目引用libB
项目
我已经设法通过在Android.mk
makefile中添加自己的规则来处理ndk-build中构建的swig部分。所有这一切都很好。
最近我想尝试一下eclispse管理的ndk-builds,这样我就不用再通过控制台手动触发本机构建了。
所以我已经为libA
添加了“原生支持”,并且(经过一点调整/配置后)它确实正确构建了原生libA.so
文件。
问题是,自从我为我的库添加了本机支持并更新了eclispe的android插件(ADT,CDT,NDK)之后,就无法在其他项目中导入libA
。似乎从未创建过jar文件。并且没有“删除原生支持”的选项。
它在libB
给出的错误是:
The container 'Android Dependencies' references non existing library 'D:\path\to\libA\bin\libA.jar'
App
中的类似内容,但每个库都有一个:
The container 'Android Dependencies' references non existing library 'D:\path\to\libA\bin\libA.jar'
The container 'Android Dependencies' references non existing library 'D:\path\to\libB\bin\libB.jar'
所以我试着回去,并在项目中恢复与本机支持相关的所有内容。所以,我必须通过控制台手动调用ndk-build(它可以工作,构建共享对象)。但是日食部分仍然以相同的错误失败。所以我现在怀疑插件更新v22.0.0.v201305140200--675183
。
有人有想法吗?
感谢。
** 编辑#1 **
我继续调查,并通过安装Android SDK的构建工具(现在在SDK管理器中单独的软件包)设法部分解决了我的问题。
结果是我现在可以在控制台中使用ant构建我的App
项目,但是eclipse仍然不能。似乎eclipse试图阅读/path/to/libA/bin/libA.jar
,但创建的是/path/to/libA/bin/classes.jar
使用命令行构建App
项目时,一个新问题是它不会从libA
导入共享库。
继续调查......
** 编辑#2 **
我设法修复了与未导入共享对象相关的问题。创建了一个jni
文件夹,其中包含Application.mk
和Android.mk
。这些makefile只用于导入lib,没有源文件(这就是我没有*.mk
文件的原因)
但是eclipse + ADT 22.0.0仍然无法构建项目(在每个位置搜索libA.jar
和libB.jar
而不是classes.jar
。)
** 编辑#3 **
我继续调查,我已经删除了项目中与eclipse相关的所有内容(例如.externalToolBuilders
,.project
,.cproject
),并在我的eclipse工作区中重新导入它们。现在构建系统设法导入libA
和libB
的jar库。但显然它不会触发ndk-build(因为它们不再配置本机支持)。