Android Studio使用具有相同包名的库和项目

che*_*ist 13 android gradle android-studio

我有一个库,我用作所有Android应用程序的基础,并有以下清单文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.android"
    xmlns:tools="http://schemas.android.com/tools"
    android:versionCode="36"
    android:versionName="1.b" >

    <uses-sdk
        android:minSdkVersion="5"
        android:targetSdkVersion="21"

        tools:overrideLibrary="com.facebook.android"/>
Run Code Online (Sandbox Code Playgroud)

然后我尝试在我的一个具有以下清单的项目中使用它:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.android"
    xmlns:tools="http://schemas.android.com/tools"
    android:versionCode="36"
    android:versionName="1.6" >

    <uses-library
        android:name="com.example.android"
        android:required="true"/>

    <uses-sdk
        android:minSdkVersion="5"
        android:targetSdkVersion="21"

        tools:overrideLibrary="com.facebook.android"/>
Run Code Online (Sandbox Code Playgroud)

请注意,使用的包名称是相同的:com.example.android.由于该应用程序是在com.example.android下发布的,因此我无法为该应用程序更改它.至于图书馆,由于历史原因,它具有相同的pacakge名称.当我构建项目时,我收到以下错误:

FAILURE:构建因异常而失败.

  • 出了什么问题:任务执行失败':exampleCom:processDebugResources'.

    错误:库使用与此项目相同的包:com.example.android您可以使用android.enforceUniquePackageName = false暂时禁用此错误但是,这是临时的,将在1.0中强制执行

我不想更改库或应用程序的包名称.我不知道在哪里添加"android.enforceUniquePackageName = false".有任何想法吗?另外,如何解决超过1.0(我已经在使用)?

spa*_*ist 13

您可以在android下的app modules build.gradle文件中添加enforceUniquePackageName = false:

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.1"
    enforceUniquePackageName = false
    ...
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,这导致了构建工具中未修复的bug的另一个问题.

错误:任务':app:packageAllDebugClassesForMultiDex'的执行失败.java.util.zip.ZipException:重复条目:... BuildConfig.class

请参阅/sf/answers/1911702411/

  • 我使用的是Android Studio 2.1.2.我有一个库模块,它使用与主app模块相同的包名.将"enforceUniquePackageName = false"添加到app模块的`build.gradle`文件(由spatialist建议)修复了问题.我没有得到他提到的"重复输入"问题. (3认同)

Ste*_*oft 1

包名称是包的唯一标识符,因此库和应用程序不应使用相同的包名称。如果应用程序已发布,请更改库的包名称。