ไม่มีคำตอบใดที่ทำให้ฉันพอใจ แต่ Liberty อยู่ใกล้ นี่คือวิธีที่ฉันทำ ก่อนอื่นในขณะนี้ฉันทำงานกับ:
- Android Studio เบต้า 0.8.2
- ปลั๊กอิน Gradle 0.12. +
- Gradle 1.12
เป้าหมายของฉันคือเรียกใช้Debug
เวอร์ชันพร้อมกับRelease
เวอร์ชันบนอุปกรณ์เดียวกันโดยใช้เวอร์ชันเดียวกันContentProvider
เวอร์ชันบนเครื่องเดียวกันโดยใช้แบบเดียวกัน
ในbuild.gradleของ app set ต่อท้ายสำหรับ Debug build:
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 (14.11.2014)
อีกครั้งฉันจะเริ่มต้นด้วยการตั้งค่าปัจจุบันของฉัน:
- Android Studio เบต้า 0.9.2
- ปลั๊กอิน Gradle 0.14.1
- Gradle 2.1
โดยพื้นฐานแล้วหากคุณต้องการปรับแต่งค่าบางอย่างสำหรับงานสร้างต่างๆคุณสามารถทำได้จากไฟล์ build.gradle:
- ใช้buildConfigFieldเพื่อเข้าถึงจาก
BuildConfig.java
คลาส
- ใช้resValueเพื่อเข้าถึงจากทรัพยากรเช่น@ string / your_value
คุณสามารถสร้าง buildType หรือไดเร็กทอรีรสชาติแยกต่างหากและแทนที่ XML หรือค่าภายในทรัพยากรได้ อย่างไรก็ตามฉันจะไม่ใช้มันในตัวอย่างด้านล่าง
ตัวอย่าง
ในไฟล์build.gradle ให้เพิ่มสิ่งต่อไปนี้:
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"'
}
}
คุณจะเห็นผลลัพธ์ในคลาสBuildConfig.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>
ในauthenticator.xmlใช้ทรัพยากรที่ระบุในไฟล์ build.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"
/>
ในsyncadapter.xmlของคุณให้ใช้ทรัพยากรเดียวกันอีกครั้งและ@ string / authorityด้วย
<?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) ใช้ไม่ได้กับทรัพยากรที่สร้างขึ้นเหล่านี้ดังนั้นคุณต้องพิมพ์ด้วยตนเอง