applicationVariants.dex.dependsOnコードをdexファイルに変換する前にいくつかの追加作業を行うというタスクがあり、Androidのgradleプラグイン1.3より前にすべてうまくいきました。しかし、1.4以降、dexタスクへのアクセスは禁止されており、そのようなエラーのヒントが表示されます。 Android Gradleプラグインが提供するTransform APIの使い方
OK。新しい変換APIをdexタスクの代わりに使用する必要があります。しかし、問題は実際にはTransform APIについてのほとんどのドキュメントがないことです。私が見つけたのは、Google公式文書hereですが、それはあまり理解しにくいようでした。
だから私は私が正しかった場合、私は本当に知りませんどのカスタムトランスフォームを書き込もうとしました:
public class MyTransform extends Transform {
@Override
public String getName() {
return "MyTransformImpl";
}
@Override
public Set<QualifiedContent.ContentType> getInputTypes() {
Set<QualifiedContent.ContentType> set = new HashSet<QualifiedContent.ContentType>();
set.add(QualifiedContent.DefaultContentType.CLASSES);
return set;
}
@Override
public Set<QualifiedContent.Scope> getScopes() {
Set<QualifiedContent.Scope> set = new HashSet<QualifiedContent.Scope>();
set.add(QualifiedContent.Scope.PROJECT);
return set;
}
@Override
public boolean isIncremental() {
return false;
}
}
それが空カスタムを変換します。私はtranformロジックを追加していませんが、それは問題ではありません。 はその後、私はこのが私のGradleファイルで文書化されたAPIを使用してを変革登録:
def transform = new MyTransform()
project.android.registerTransform(transform)
それらを私はタスクを組み立てる実行すると、私のカスタム変換作業と思われます。
そして最後のapkファイルが正常に生成された、すべてが右のようだ:私は、実行中のタスクリストからそれを見ることができます。しかし、私はapkをインストールし、アプリケーションを起動すると、クラッシュしました。このようなエラーが発生した:奇妙な
。 ClassNotFoundExceptionが発生し、MainActivityが見つかりませんでした。どのようにすることができる!その後、私のapkファイルを再コンパイルし、jd-guiのソースを参照して、私は完全に混乱していた。
私のコードがすべて含まれていません。サポートライブラリ内のクラスのみが残ります。しかし、実際に私のコード.classファイルは、app/build/intermediate/classes/ディレクトリに存在します。そして、もし私がgradleの登録行をコメントアウトすると:
// project.android.registerTransform(transform)
すべてがうまくいきます。だから私は間違ってカスタム変換を書いたと思うが、私は本当に正しいものを書く方法を知りません。
助けてもらえますか?心から感謝します。
こんにちはTony、Transform API用のGitHubでサンプルアプリケーションを提供していただけますか? – Krrishnaaaa