最近、EclipseAndroidプロジェクトでProGuardをアクティブにしました。外部ライブラリと動的に参照されるクラスをproguard.cfgに追加した後、apkをビルドするときにエラーが発生しません。ただし、インストールしたアプリを起動しようとすると、NoSuchMethodErrorが発生します。
メインアクティビティのonCreateメソッドで呼び出される特定のメソッドに絞り込みました。物事を単純化するために、クラスとメソッドは次のようになります(私は多くのコードを省略しましたが、これはそれを説明する必要があると思います):
public class TestMain extends TabActivity implements OnSharedPreferenceChangeListener{
...
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
testMethod();
}
}
testMethod()は次のように定義されます。
private void testMethod() {
int charsLeft = maxPostMessageLength - someEditText.length();
...
}
「someEditText.length()」の部分を削除すると、アプリが起動します。ですから、私の見方では、見つからないメソッドはEditText.length()メソッドです。ただし、不思議なことに、testMethodから「someEditText.length()」を削除してonCreateメソッドに直接配置すると、アプリも起動します。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
test = someEditText.length();
testMethod();
}
このエラーを取り除く方法と、onCreateメソッドで直接someEditText.length()を呼び出すことができるが、onCreateメソッドで呼び出されるメソッドでは呼び出せない理由を誰かが知っていますか?もちろん、Proguardを使用しなくてもアプリは正常に動作します。
編集:proguard.cfgの-dontshrink、-dontobfuscate、および-dontoptimzieオプションを試しました。-dontoptimizeを使用すると、アプリはエラーなしで起動します。それでも、この特定のエラーの正確な原因は興味深いでしょう。