3

我正在使用 Android Studio 2.1.3 (Mac OS X) 和 com.android.tools.build:gradle:2.1.3。我已经尝试过使缓存无效并重新启动和清理构建。

我有一个包含许多 ProductFlavor 的项目,所有这些都使用相同的启动活动保存一个(这个是使用许可库的付费版本,所有其他都是免费的,所以我不打扰,尽管解决方案可能只是对所有风格使用活动的许可版本,但除非设置了资源,否则跳过许可......似乎太容易破解了)。因此,我有 2 个 AndroidManifest.xml 文件:

// app/src/main/AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.company.app">
    ...
    <application android:allowBackup="true" android:icon="@mipmap/ic_launcher"
                 android:label="@string/appFriendlyName"
                 android:theme="@style/AppTheme">

        <activity
            android:name="com.company.app.TabsFragmentActivity"
            android:screenOrientation="portrait"
            android:label="@string/appFriendlyName">
            <intent-filter android:label="@string/launcherLabel">
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    ...
    </application>
</manifest>


// app/src/PaidFlavor/AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:tools="http://schemas.android.com/tools"
          package="com.company.app">
    <application android:allowBackup="true" android:icon="@mipmap/ic_launcher"
                 android:label="@string/appFriendlyName"
                 android:theme="@style/AppTheme">

        <activity
            tools:node="merge"
            android:name="com.company.app.TabsFragmentActivityLicensed"
            android:screenOrientation="portrait"
            android:label="@string/appFriendlyName">
            <intent-filter android:label="@string/launcherLabel">
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            tools:node="remove"
            android:name="com.company.app.TabsFragmentActivity"/>
    </application>
</manifest>

这很好用,我可以检查生成的中间(合并)AndroidManifest.xml,确实删除了 TabsFragmentActivity 活动,并添加了 TabsFragmentActivityLicensed,一切正常。

但我不希望调试版本(构建类型)获得许可。同样,我可以在代码中轻松解决它,但这是问题的原理!所以我认为移动很容易

app/src/PaidFlavor/AndroidManifest.xml

app/src/PaidFlavorRelease/AndroidManifest.xml

这就是事情出错的地方。一切都没有错误地构建,我查看了中间(合并)清单,它看起来仍然正确。但是,Android Studio 尝试使用发布构建类型启动 PaidFlavor:

adb shell am start -n "com.company.project/com.company.app.TabsFragmentActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER

错误的活动!它是从哪里得到的?我是否使用了错误的子目录(PaidFlavorRelease/)?这导致了明显的错误:

Error while executing: am start -n "com.company.project/com.company.app.TabsFragmentActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.company.project/com.company.app.TabsFragmentActivity }
Error type 3
Error: Activity class {com.company.project/com.company.app.TabsFragmentActivity} does not exist.

Error while Launching activity
4

0 回答 0