参考同一项目中的一个类,不同的模块

时间:2015-11-13 16:54:03

标签: android android-gradle osmdroid android-build

我有来自github的osmdroid代码,并将它放在Android Studio项目中,顶层结构如下:

+OpenStreetMapViewer  
+osmdroid-android  
+osmdrod-packager  
+osmdroid-third-party  
+sample  
+Gradle Scripts  

然后我添加了自己的模块:

+OpenStreetMapViewer
+MyModule
+osmdroid-android
+osmdrod-packager
+osmdroid-third-party
+sample
+Gradle Scripts

MyModule有一个Activity(一个AppCompatActivity),它运行得很好。现在我想使用MapActivity OpenStreetMapViewer中的MyModule课程 所以我将依赖项添加到MyModule的build.gradle

dependencies {
    ...
    compile project(':OpenStreetMapViewer')
}

这似乎不起作用,因为:
- 尝试在MyModule中使用MapActivity时,它不知道在哪里找到它 - 我收到了这个警告:

Warning:Dependency org.osmdroid:OpenStreetMapViewer:5.0-SNAPSHOT on project emnrdstickylistheaders resolves to an APK archive which is not supported as a compilation dependency. 
File: D:\Users\myusername\AndroidstudioProjects\osmdroid-stickylist\OpenStreetMapViewer\build\outputs\apk\OpenStreetMapViewer-release-unsigned.apk

我该怎么做?

1 个答案:

答案 0 :(得分:2)

我会因此而受到抨击,但如果从需要中导入另一个APK的类,那么请不要使用gradle。 Maven可以通过maven-android-plugin https://github.com/simpligility/android-maven-plugin来实现。事实上,这就是osmdroid为集成测试所做的事情。这是一个取决于APK的APK项目。当然,这方面的缺点是使用maven作为android studio的构建工具的支持是非常糟糕的。使用Intellij稍微好一些,但仍有许多未解决的问题,例如此问题https://youtrack.jetbrains.com/issue/IDEA-145825

真正的问题应该是,"这是正确的方法吗?" (将APK作为依赖项导入)。对此,我回答,考虑当前构建工具支持与gradle的状态,没有。您可能最好将MapActivity的相关部分复制到您自己的项目中,或者从头开始,只导入您需要的库作为依赖项。换句话说,您的gradle文件应包含此内容(位于https://github.com/osmdroid/osmdroid/wiki/How-to-add-the-osmdroid-library-via-Gradle):

dependencies { compile 'org.osmdroid:osmdroid-android:5.0.1@aar' }

然后按照osmdroid wiki上其余的指南进行操作:https://github.com/osmdroid/osmdroid/wiki/How-to-use-the-osmdroid-library了解如何使用它来满足您的需求。

有许多方法可以让osmdroid满足您的需求。如果你无法做到你想做的事,请在github上打开一个问题。我是贡献者,拥有写入权限,可以提供帮助。