デバッグ アプリにパッケージ名のサフィックスを追加するように Gradle を設定しました。これにより、使用しているリリース バージョンとデバッグ バージョンを 1 台の電話で使用できるようになります。私はこれを参照していました:http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-ビルドタイプ
私の build.gradle ファイルは次のようになります。
...
android
{
...
buildTypes
{
debug
{
packageNameSuffix ".debug"
versionNameSuffix " debug"
}
}
}
アプリで ContentProvider を使い始めるまではすべて正常に動作します。結果は次のようになります:
Failure [INSTALL_FAILED_CONFLICTING_PROVIDER]
これは、2 つのアプリ (リリースとデバッグ) が同じ ContentProvider 権限を登録しているために発生すると理解しています。
これを解決する可能性が 1 つあります。正しく理解していれば、ビルド時に使用するさまざまなファイルを指定できるはずです。次に、さまざまなリソース ファイルにさまざまな権限を配置し (マニフェストから権限を文字列リソースとして設定)、デバッグ ビルドにさまざまなリソースを使用するように Gradle に指示できるはずです。これは可能ですか? 可能であれば、それを実現する方法についてのヒントがあればありがたいです。
あるいは、Gradle を使用してマニフェストを直接変更することは可能でしょうか? 1 つのデバイスで ContentProvider を使用して同じアプリを実行する方法に関するその他のソリューションも歓迎します。
ベストアンサー1
既存の回答はどれも私を満足させませんでしたが、Liberty はそれに近いものでした。そこで、私は次のようにしています。まず、現時点では、次のことに取り組んでいます。
- Android Studio ベータ 0.8.2
- Gradle プラグイン 0.12.+
- グラドル1.12
私のゴール同じデバイス上で同じ を使用してDebug
バージョンとバージョンを同時に実行することです。Release
ContentProvider
でビルドアプリのデバッグビルドのサフィックスを設定します:
buildTypes {
debug {
applicationIdSuffix ".debug"
}
}
でAndroidManifest.xmlファイルセットandroid:authorities
のプロパティContentProvider
:
<provider
android:name="com.example.app.YourProvider"
android:authorities="${applicationId}.provider"
android:enabled="true"
android:exported="false" >
</provider>
あなたのコードAUTHORITY
実装の必要な場所で使用できるプロパティを設定します。
public static final String AUTHORITY = BuildConfig.APPLICATION_ID + ".provider";
ヒント:以前はBuildConfig.PACKAGE_NAME
これで完了です。うまく機能します。SyncAdapter を使用する場合は、読み続けてください。
SyncAdapter のアップデート (2014 年 11 月 14 日)
もう一度、現在の設定から始めます。
- Android Studio ベータ 0.9.2
- Gradle プラグイン 0.14.1
- グラドル2.1
基本的に、異なるビルドの値をカスタマイズする必要がある場合は、build.gradle ファイルから行うことができます。
- 使用ビルド構成フィールド
BuildConfig.java
クラスからアクセスするには - 使用値リソースからアクセスする例@文字列/あなたの値
リソースの代替として、別の buildType または flavor ディレクトリを作成し、その中の XML または値をオーバーライドすることもできます。ただし、以下の例ではこれを使用しません。
例
でビルドファイルに以下を追加します。
defaultConfig {
resValue "string", "your_authorities", applicationId + '.provider'
resValue "string", "account_type", "your.syncadapter.type"
buildConfigField "String", "ACCOUNT_TYPE", '"your.syncadapter.type"'
}
buildTypes {
debug {
applicationIdSuffix ".debug"
resValue "string", "your_authorities", defaultConfig.applicationId + '.debug.provider'
resValue "string", "account_type", "your.syncadapter.type.debug"
buildConfigField "String", "ACCOUNT_TYPE", '"your.syncadapter.type.debug"'
}
}
結果は次のようになりますビルド構成.javaクラス
public static final String ACCOUNT_TYPE = "your.syncadapter.type.debug";
そしてビルド/生成/res/生成/デバッグ/値/生成.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Automatically generated file. DO NOT MODIFY -->
<!-- Values from default config. -->
<item name="account_type" type="string">your.syncadapter.type.debug</item>
<item name="authorities" type="string">com.example.app.provider</item>
</resources>
あなたの認証子.xmlbuild.gradleファイルで指定されたリソースを使用する
<?xml version="1.0" encoding="utf-8"?>
<account-authenticator xmlns:android="http://schemas.android.com/apk/res/android"
android:accountType="@string/account_type"
android:icon="@drawable/ic_launcher"
android:smallIcon="@drawable/ic_launcher"
android:label="@string/app_name"
/>
あなたの同期アダプタ.xml同じリソースを再度使用し、@文字列/権限あまりにも
<?xml version="1.0" encoding="utf-8"?>
<sync-adapter xmlns:android="http://schemas.android.com/apk/res/android"
android:contentAuthority="@string/authorities"
android:accountType="@string/account_type"
android:userVisible="true"
android:supportsUploading="false"
android:allowParallelSyncs="false"
android:isAlwaysSyncable="true"
/>
ヒント:自動補完(Ctrl+Space)はこれらの生成されたリソースでは機能しないため、手動で入力する必要があります。