私は最近、ProGuard for my Eclipse Androidプロジェクトを有効にしました。 proguard.cfgに外部のlibsと動的に参照されるクラスを追加した後、私はapkを構築するときに何のエラーも受け取りません。私はインストールされたアプリを起動しようとするとNoSuchMethodErrorが表示されます。Android:Proguard 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オプションを試しました。 -dontptimizeを指定すると、アプリはエラーなしで起動します。 しかし、この特定のエラーの原因となるのは興味深いでしょう。
私にこれを指摘してくれてありがとう。私は-dontshrinkオプションを試しましたが、エラーはまだ同じです。ただし、-dontoptimizeを指定すると、アプリはエラーなしで起動します。私はそれに応じて私の質問を編集しました。 – Manuel