如何将 android 项目作为库导入而不是将其编译为 apk (Android studio 1.0)
Posted
技术标签:
【中文标题】如何将 android 项目作为库导入而不是将其编译为 apk (Android studio 1.0)【英文标题】:How to import android project as library and NOT compile it as apk (Android studio 1.0) 【发布时间】:2015-02-16 15:28:32 【问题描述】:我尝试导入一个项目(projLib)作为另一个项目(projAPK)的依赖项。
projAPK gradle 有这个:
dependencies
compile project(':libs:NewsAPI')
compile project(':projLib')
但是当我同步 gradle 时它给出了这个错误:
Error:Dependency android_2015:projLib:unspecified on project projAPK 解析为不支持作为编译依赖项的 APK 存档。文件:/Users/myname/Documents/Development/Android_2015/libs/projAPK/build/outputs/apk/projLib-release-unsigned.apk
所以我想有两种解决方案:
-
不知何故让 gradle 认为 projLib 是一个不应编译为 apk 的库
不知何故让 gradle 不明确编译 projLib
问题是,我找不到任何方法。 如果你们能帮忙就太好了:)
【问题讨论】:
【参考方案1】:在 projLib 的 build.gradle 文件中,您会看到如下语句:
apply plugin: 'com.android.application'
告诉 Gradle 将其构建为应用程序,生成一个 APK。如果你把它改成这样:
apply plugin: 'com.android.library'
它将构建为一个库,生成一个 AAR,它应该可以工作。
如果您还需要 projLib 来生成单独的 APK,那么您必须进行一些重构以将您需要的通用代码提取到第三个库模块中,并让两个 APK 依赖就可以了。
不允许库设置applicationId
,因此如果您看到与此相关的错误消息,请将其从库的构建脚本中删除。
【讨论】:
谢谢先生,这行得通。关于这些插件,你有什么可以推荐给我的阅读/文档吗? 我试过了,但出现了一个新错误:Error:Library projects cannot set applicationId. applicationId is set to 'com.bulletnoid.android.widget.StaggeredGridViewDemo' in default config.
StaggeredGridViewDemo 是我尝试作为模块导入的库中的一个包。
我刚刚从 defaultConfig 中删除了应用程序 ID 行,它工作正常。
您还需要在 ... 上添加 'tools:replace="android:icon" 以覆盖主图标【参考方案2】:
在模块 gradle 文件中-
替换 apply plugin: 'com.android.application'
为apply plugin: 'com.android.library'
然后删除 applicationId "xxx.xxx.xxxx"
清理和构建
【讨论】:
一切都在模块 gradle 文件中进行【参考方案3】:只需将这些行添加到库 gradle
文件并删除其他部分
apply plugin: 'com.android.library'
android
compileSdkVersion 23
buildToolsVersion '23.0.2'
dependencies
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.squareup.picasso:picasso:2.4.0'
compile 'com.google.code.gson:gson:2.2.4'
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:gridlayout-v7:23.1.1'
,...
【讨论】:
以上是关于如何将 android 项目作为库导入而不是将其编译为 apk (Android studio 1.0)的主要内容,如果未能解决你的问题,请参考以下文章
如何在xcode中使用图像文件作为启动图像而不将其名称更改为“Default.png”并将其重新导入到项目中?