Using build types in Gradle to run same app that uses ContentProvider on one device

后端 未结 14 1031
小蘑菇
小蘑菇 2020-11-28 00:22

I have set up Gradle to add package name suffix to my debug app so I could have release version that I\'m using and debug version on one phone. I was referencing this: http:

14条回答
  •  时光取名叫无心
    2020-11-28 00:48

    gradle.build

    android {
        compileSdkVersion 23
        buildToolsVersion "23.0.1"
    
        defaultConfig {
            applicationId "com.example.awsomeapp"
            minSdkVersion 9
            targetSdkVersion 23
            versionCode 1
            versionName "1.0.0"
        }
    
        productFlavors
        {
            prod {
                applicationId = "com.example.awsomeapp"
            }
    
            demo {
                applicationId = "com.example.awsomeapp.demo"
                versionName = defaultConfig.versionName + ".DEMO"
            }
        }
    
        buildTypes {
            release {
                signingConfig signingConfigs.release
                debuggable false
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
            }
    
            debug {
                applicationIdSuffix ".debug"
                versionNameSuffix = ".DEBUG"
                debuggable true
            }
        }
    
        applicationVariants.all { variant ->
            variant.outputs.each { output ->
                // rename the apk
                def file = output.outputFile;
                def newName;
                newName = file.name.replace(".apk", "-" + defaultConfig.versionName + ".apk");
                newName = newName.replace(project.name, "awsomeapp");
                output.outputFile = new File(file.parent, newName);
            }
    
            //Generate values Content Authority and Account Type used in Sync Adapter, Content Provider, Authenticator
            def valueAccountType = applicationId + '.account'
            def valueContentAuthority = applicationId + '.authority'
    
            //generate fields in Resource string file generated.xml
            resValue "string", "content_authority", valueContentAuthority
            resValue "string", "account_type", valueAccountType
    
            //generate fields in BuildConfig class
            buildConfigField "String", "ACCOUNT_TYPE", '"'+valueAccountType+'"'
            buildConfigField "String", "CONTENT_AUTHORITY", '"'+valueContentAuthority+'"'
    
            //replace field ${valueContentAuthority} in AndroidManifest.xml
            mergedFlavor.manifestPlaceholders = [ valueContentAuthority: valueContentAuthority ]
        }
    }
    

    authenticator.xml

    
    
    

    sync_adapter.xml

    
    
    

    AndroidManifest.xml

    
    
    
        
        
        
    
        
        
        
    
         
            
                
                    
                
                
            
            
    
            
            
                
                    
                
                
            
            
    
            
            
            
             
        
    
    

    Code:

    public static final String CONTENT_AUTHORITY = BuildConfig.CONTENT_AUTHORITY;
    public static final String ACCOUNT_TYPE = BuildConfig.ACCOUNT_TYPE;
    

提交回复
热议问题