2017-09-20 1 views
0

私はしばらくの間、アプリケーションを開発しており、ビルドの問題がないデバッグビルドタイプに対してテストしてきました。型描画可能の予想リソース[ResourceTypeが]私のAndroidのリリースビルドタイプに 'デバッグ可能なtrue'を追加すると、間違ったエラーがなくなるのはなぜですか?

このエラーはButterknife、生成された.javaファイルで発生します。今日、私は、リリースビルドの種類を構築し、私はエラー

エラーを取得してみました。 (クリーンおよび無効化するキャッシュを行うことを含む)、試行錯誤のかなり後、私はこのように、私は私のアプリのbuild.gradleファイルにリリースビルドタイプにdebuggable trueを追加した場合、ビルドが成功したことを発見:

release { 
    debuggable true 
    minifyEnabled true 
    proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
} 

をそれ私はこのように他のプロパティをコメントアウトした場合にも構築します。

release { 
    debuggable true 
    //minifyEnabled true 
    //proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
} 

をしかし、私はまたdebuggable trueをコメントアウトした場合、ビルドは以前のように失敗します。だから、たとえ私がそこにいなくても、私のリリースビルドタイプにdebuggable trueを持っていなければならないと思う。

これを引き起こしている可能性がありますどのような任意のアイデア?さらに重要なのは、どのようにしてdebuggable trueなしで、そしてlintの警告を抑制することなく、エラーを取り除くことができるのでしょうか?

(ハンドコード化された.javaファイル内の特定の宣言でlintエラーResourceTypeを抑制しようとしましたが、役に立たなくなりました。TBH、そのようなソリューションを使用して実稼働させたくありません)

答えて

0

難読化問題に直面しているように私に聞こえます。 Proguardは、インストールする前にデッドコードを削除し、パッケージサイズを縮小するために使用されます。リリースビルドでは通常、minifyEnabled = trueとなります。それをデバッグ可能にすることは、おそらくこれを行うことを妨げるでしょう。

例外を作成するよう指示するプログラムルールファイルがあります。これはどのように動作するのですか?

Proguardはあなたのコードを梳き、 "lint"のような未使用のコードを探し、誰もコードを呼び出すことがないので、コードを削除します。

しかし、BusやButterknifeのようなツールでは、コードにアクセスするために反射や注釈を使用します。これにより、IDEとLINTは使用されていないと判断され、削除されます。したがって、プロジェクトが機能するために必要なコンポーネントが欠けているため、コードはリリースで正しくコンパイルされません。

はどちらか考えてみましょうあなたのProGuardの規則にこれを追加することminifyEnable = falseを または 試みを設定すると、それはまだ動作しない場合は、あなたが起こって何かを持っているかもしれ

-keep class butterknife.* 
-keepclasseswithmembernames class * { @butterknife.* <methods>; } 
-keepclasseswithmembernames class * { @butterknife.* <fields>; } 

を提出します。奇妙な部分は欠けている "リソース"部分です。それは、未使用のリソースがバターナイフのために削除されていると思います。だから私はそこにデバッグ可能なままにしないだろう、私はちょうど上記のソリューションはそれを修正しない場合は、minifyEnabled = falseを設定します。それでも解決しない場合は

、その後、実行してみてください:

bashのgradlew assembleRelease --debugをし、そこから実際の苦情や問題点を探してください。

最高の運があり、うまくいけばその修正。

+0

proguardルールファイルにはすでにこれらのルールがあります。さらに、元の説明で述べたように、ビルドタイプの設定ですべてをコメントアウトするとビルドが失敗します。すべてをコメントアウトすると、proguardが有効でなく、minifyEnabledがfalse(明示的にfalseに設定しようとしましたが、同じエラーが発生しました)という意味です。したがって、どちらの問題でもないと私には思われます。 --debugでgradleを実行すると、何の関心もありませんでした。しかし、返信いただきありがとうございます。 – roobyroo

+0

ちょうど私が次に試してみたいことは、左下のメニューからビルドバリエーションを変更してリリースしてコンパイルするようにして、APKを生成するときに見つけ出す必要がないようにすることです。あなたの問題がリリースビルドにある場合、定期的にビルドします。共有するサンプルプロジェクトを作成したい場合は、トラブルシューティングを手伝ってうれしく思いますが、他のものはちょうど推測とチェックが必要です。しかし、私は個人的にバターナイフの使用をやめます。 AndroidはData Bindingを導入しました。慣れてしまった方がはるかに優れています。 – Sam

関連する問題