0

Is it required to include support-v4 and appcompat-v7 in gradle if already including support-design? I see that when including support-design support-v4 and appcompat-v7 is already part of my external libraries even when they are not in the gradle. I know that support-design depends on appcompat-v7 and appcompat-v7 depends on support-v4 I just want to know if removing support-v4 and appcompat-v7 from gradle will not cause any issues.

I will also like to exclude support-v4(to reduce apk size), I have done it by excluding it from support-design and only adding modules from support-v4 that are needed, am I in the right direction? See below:

gradle:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.1"
    defaultConfig {
        applicationId "com.example.test.applicationtest_v4lib"
        minSdkVersion 19
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    //compile 'com.android.support:appcompat-v7:26.0.1'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    compile('com.android.support:design:26.0.1'){
        exclude group: 'com.android.support', module: 'support-v4'
    }
    compile 'com.android.support:support-fragment:26.0.1'
    //compile 'com.android.support:support-compat:26.0.1'
    //compile 'com.android.support:support-v4:26.0.1'
    testCompile 'junit:junit:4.12'
}

My Activity:

import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
//import android.support.v4.app.ActivityCompat;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });

        //ActivityCompat
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}
Sneh Pandya
  • 7,230
  • 6
  • 32
  • 49

1 Answers1

0

Most libraries in the Android Support Library suite have some dependency on one or more libraries. For example, nearly all support libraries have a dependency on the support-compat package. In general, you do not need to worry about support library dependencies, because the gradle build tool manages library dependencies for you, by automatically including dependent libraries.

If you want to see what libraries and library dependencies are included in your app, run the following command at the build root of your app development project to get a report of the dependencies for that project, including Android Support Libraries and other libraries:

gradle -q dependencies your-app-project:dependencies

See details in Android documentation

Sharon
  • 83
  • 12