我有来自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
我该怎么做?
答案 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上打开一个问题。我是贡献者,拥有写入权限,可以提供帮助。