我有一个项目,在Android Studio v 0.3.2中使用Gradle构建。 我的项目依赖于其他两个模块(android库)。使用build.gradle文件很好地定义了项目结构。 问题是......当我在Android设备上运行项目时,我在我的设备上安装了3个apk。一个是主项目(唯一正确的一个),另外两个来自导入的模块(两个我不想安装)。 我怎样才能实现这一目标?或者我做错了什么?
项目结构:
MyLibModule 与Main项目位于同一路径,因为我还需要在其他项目中使用此模块。
需要明确的是:整个项目构建正常,所有依赖项都可以,但为什么我的设备上有3个APK?
答案 0 :(得分:15)
经过一整天的努力解决这个问题,我找到了这种奇怪行为的原因。问题是图书馆模块的清单。在我切换到Android工作室之前,我使用过Eclipse。我在库项目的清单中声明了testActivity。从我的库模块的清单中删除所有测试活动解决了这个问题。现在Android Studio只安装MainProject apk。
一些代码: MyLibModule的清单:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.test.mylibmodule"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="7"/>
<application>
<activity
android:name=".TestActivity"
android:label="@string/app_name">
</activity>
</application>
</manifest>
更改为:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.test.mylibmodule" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="7"/> <application> </application> </manifest>
....对于MyOtherModule也一样。
注意:空应用程序节点必须保留在清单中,以避免构建错误。
答案 1 :(得分:10)
从库的启动活动中删除intent-filter
<application>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
已更改为
<application>
<activity android:name=".MainActivity"/>
</application>
答案 2 :(得分:1)
这是因为您的库在build.gradle
文件中定义为应用程序而不是库。寻找这一行:
apply plugin: 'android'
并将其替换为:
apply plugin: 'android-library'
您可能还需要对构建文件进行其他调整,因为并非所有适用于应用程序的内容都可以在库构建文件中指定。有关详细信息,请参阅http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Library-projects。