build.gradleでminifyEnabledをtrueにしてもActivityはminifyされない
まとめ
- Activityはgradleの設定でminifyをかけてもminifyされない
- minifyされているかの確認をしたかったらJavaだけのクラスを仕込んで見るのがお手軽
検証1
gradle
でminify
の設定をした時、うまくいっていたらActivityのクラス名がa
などになっているだろうと下記のようなコード(検証用コード1)を書いてリリースビルドしたapkをインストールしたところ、ログには
01-19 22:43:13.181 9091-9091/? D/MainActivity: com.example.woshidan.minifytest.MainActivity
とminifyされていないクラス名が表示されていました。
検証用コード1
apply plugin: 'com.android.application' android { compileSdkVersion 25 buildToolsVersion "25.0.2" defaultConfig { applicationId "com.example.woshidan.minifytest" minSdkVersion 16 targetSdkVersion 25 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } }
// proguard-rules.pro // minifyされてるの見るテストなのでコメントのみ
package com.example.woshidan.minifytest; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.util.Log; 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) { Log.d("MainActivity", MainActivity.class.getName()); } }); }
検証2
先輩に相談したら、「Activity
はminify
できないとか?」という話の流れになって、「Lanucher
に指定されているActivity
では?」「とりあえずAndroidフレームワークと関係ないJavaのクラスを入れてみては」という話になったので、次は下記のようなコード(検証用コード2)を書いてみたら、ログでminifyが確認できたのはJavaのクラスだけだったのでActivity
がminify
できないようでした。
01-19 22:57:26.532 19165-19165/? D/MainActivity: com.example.woshidan.minifytest.MainActivity 01-19 22:57:26.766 19165-19165/? D/SubActivity: com.example.woshidan.minifytest.SubActivity 01-19 22:57:26.768 19165-19165/? D/MinifyTester: com.example.woshidan.minifytest.a
検証用コード2
build.gradle
とproguard-rules.pro
は検証用コード1と同じ。
package com.example.woshidan.minifytest; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.util.Log; 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) { Log.d("MainActivity", MainActivity.class.getName()); Intent intent = new Intent(); intent.setClass(MainActivity.this, SubActivity.class); startActivity(intent); } }); }
package com.example.woshidan.minifytest; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; public class SubActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sub); Log.d("SubActivity", SubActivity.class.getName()); MinifyTester.testClassName(); } }
package com.example.woshidan.minifytest; class MinifyTester { static void testClassName() { Log.d("MinifyTester", MinifyTester.class.getName()); } }
おなじくAndroidのシステムから呼ばれるコンポーネントのService
やBroadcastReceiver
も似たようなことがありそうな気がしますが、調べる機会があったら追記します。