Created
January 6, 2014 10:01
-
-
Save jnagels/8280622 to your computer and use it in GitHub Desktop.
Building with Android Gradle Plugin 0.7.+
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//location: android_hacks.gradle | |
//start custom permissions | |
def processManifest(variant) | |
{ | |
//here we get the content of the manifest file, and we replace {packagename} with the actual packagename. | |
variant.processManifest.doLast { | |
copy { | |
from("${buildDir}/manifests") { | |
include "${variant.dirName}/AndroidManifest.xml" | |
} | |
into("${buildDir}/processed_manifests") | |
} | |
def manifestFile = file("${buildDir}/processed_manifests/${variant.dirName}/AndroidManifest.xml"); | |
def packagename = variant.productFlavors.get(0).packageName + (variant.buildType.packageNameSuffix ?: ""); | |
def content = manifestFile.getText().replaceAll(/\{packagename\}/, packagename); | |
manifestFile.write(content); | |
} | |
variant.processResources.manifestFile = file("${buildDir}/processed_manifests/${variant.dirName}/AndroidManifest.xml"); | |
} | |
//end custom permissions | |
//START custom overriding of authorities content providers | |
def overrideContentProviderAuthority (buildVariant) | |
{ | |
println "Overriding content provider authorities" | |
def flavor = buildVariant.productFlavors.get(0).name; | |
def buildType = buildVariant.buildType.name; | |
def workspaceDir = rootProject.projectDir.absolutePath + "/App/src/"; | |
def uniqueSuffix = "." + flavor + "." + buildType; | |
def buildTypeResourceDir = workspaceDir + "/" + flavor + buildType.capitalize() + "/res/values/"; | |
def xmlStringsFileAsNode = new XmlParser().parse(workspaceDir + "main/res/values/contentproviders.xml") | |
// Loop through each ContentProvider authority string resource in the file and append a unique suffix | |
xmlStringsFileAsNode.each { | |
it.setValue(it.text() + uniqueSuffix) | |
} | |
createOverrideDirIfNecessary(buildTypeResourceDir) | |
def fileWriter = new FileWriter(buildTypeResourceDir + "contentproviders.xml") | |
def printWriter = new PrintWriter(fileWriter) | |
printWriter.print("""<?xml version="1.0" encoding="utf-8"?>\n""") | |
def xmlPrinter = new XmlNodePrinter(printWriter) | |
xmlPrinter.setPreserveWhitespace(true) | |
xmlPrinter.print(xmlStringsFileAsNode) | |
} | |
def createOverrideDirIfNecessary(dirPath) { | |
def file = new File(dirPath) | |
if (!file.exists()) { | |
file.mkdirs() | |
} | |
} | |
//for all application variants, we need to do some special stuff to make the content providers work | |
android.applicationVariants.all { variant -> | |
variant.mergeResources.dependsOn{ | |
overrideContentProviderAuthority(variant) | |
} | |
processManifest(variant) | |
} | |
//end content providers |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<manifest xmlns:android="http://schemas.android.com/apk/res/android" | |
package="com.example.myapp"> | |
<!-- {packagename} will be replaced by the actual packagename --> | |
<!-- Custom permission to safely send broadcasts between processes --> | |
<permission | |
android:name="{packagename}.permission.RECEIVE_BROADCASTS" | |
android:protectionLevel="signature"/> | |
<!-- Custom permission so 'com.showpad' is the only app that can receive push notifications --> | |
<permission | |
android:name="{packagename}.gcm.permission.C2D_MESSAGE" | |
android:protectionLevel="signature" /> | |
<!-- Receive our custom broadcasts --> | |
<uses-permission android:name="{packagename}.permission.RECEIVE_BROADCASTS" /> | |
<!-- For Google Cloud Messaging --> | |
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> | |
<uses-permission android:name="{packagename}.gcm.permission.C2D_MESSAGE" /> | |
<uses-permission android:name="android.permission.WAKE_LOCK" /> | |
<!-- SDK --> | |
<uses-sdk | |
android:minSdkVersion="14" | |
android:targetSdkVersion="19"/> | |
<application ...> | |
<!-- Activities --> | |
<!-- ... --> | |
<!-- Providers --> | |
<provider | |
android:name=".providers.AssetProvider" | |
android:authorities="@string/provider_asset" | |
android:exported="true"/> | |
<provider | |
android:name=".providers.AssetTagProvider" | |
android:authorities="@string/provider_assettags" | |
android:exported="false"/> | |
<!-- ... --> | |
<!-- Services in the same process --> | |
<<!-- ... --> | |
<!-- Services in a different process --> | |
<!-- ... --> | |
<!-- Broadcast Receivers --> | |
<receiver | |
android:name="com.showpad.gcm.receivers.GCMReceiver" | |
android:permission="com.google.android.c2dm.permission.SEND"> | |
<intent-filter> | |
<action android:name="com.google.android.c2dm.intent.RECEIVE" /> | |
<category android:name="{packagename}" /> | |
</intent-filter> | |
</receiver> | |
</application> | |
</manifest> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//location: App/src/main/java/com/example/myapp/providers/AssetProvider.java | |
public class AssetProvider extends AbstractSessionContentProvider | |
{ | |
public static final String AUTHORITY = createProviderAuthority("myapp.asset"); | |
public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/"); | |
public final static String createProviderAuthority(String inName) | |
{ | |
return inName + "." + BuildConfig.FLAVOR + "." + BuildConfig.BUILD_TYPE; | |
} | |
... | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//location: build.gradle | |
buildscript { | |
repositories { | |
mavenCentral() | |
} | |
dependencies { | |
classpath 'com.android.tools.build:gradle:0.7.+' | |
} | |
} | |
task wrapper(type: Wrapper) { | |
gradleVersion = '1.9' | |
} | |
ext { | |
//build tools version | |
myBuildToolsVersion='19.0.0' | |
//target sdk level is 19 or KitKat 4.4 | |
myCompileSdkVersion=19 | |
myTargetSdkVersion=19 | |
// minimum sdk level is 14( Ice Cream Sandwich, 4.0) | |
myMinSdkVersion=14 | |
//support library version | |
mySupportLibraryVersion='com.android.support:support-v13:19.0.0' | |
// Java version 7 | |
myJavaVersion=JavaVersion.VERSION_1_7 | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!-- Location: App/src/main/res/values/contentproviders.xml --> | |
<?xml version="1.0" encoding="utf-8"?> | |
<resources> | |
<string name="provider_asset">myapp.asset</string> | |
<string name="provider_assettags">myapp.assettags</string> | |
</resources> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment