問題タブ [android-jack-and-jill]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
4924 参照

android - JACK コンパイラで縮小化と難読化を実行する方法は?

Google は、Android Studio 2.1 を使用する Android 開発者向けの新しいJACK コンパイラのテスト バージョンをリリースしました。

私の質問は、JACK を使用して APK の難読化を有効にするにはどうすればよいですか? 以下の記事では、JACK が難読化をネイティブに実行し、Proguard の必要性を排除すると述べています。

.pro次の記事では、JACK は難読化を実行するために Proguard 構成ファイル (つまり、ファイル) を使用すると述べています。

それはまた言う

このプロセス中に、Jack は要求されたコードの縮小(縮小および/または難読化) も処理します。

これは正確にはどういう意味ですか?オプションを使用して、Proguard オプションを含むファイルをminifyEnabled定義する必要がありますか?.pro

要約すれば:

  • JACK で難読化を有効にするにはどうすればよいのでしょうか? Proguard の使用を回避できますか、それとも、JACK でコンパイルしたとしても、Proguard は難読化プロセスで事実上の役割を果たしますか?

  • JACK は現在、難読化をサポートしていますか?

ノート:

私はすでに次の投稿を参照しました:

さらなる参考文献:

アップデート:

Matt Inskoによる回答は役に立ちますが、より詳細で、より正確で標準的な回答が必要です。

0 投票する
4 に答える
14354 参照

android - Jack コンパイラの使用エラー - app/build/intermediates/packaged/debug/classes.zip' は無効なライブラリです

Jack コンパイラの使用中に次のエラーが発生しますが、何が問題なのかわかりません。

次の依存関係を持つ Android Studio 2.2 Preview 2 を使用しています。

Gradle プラグイン 2.2.0 alpha 2 と com.google.gms:google-services:3.0.0 も使用しています

どんな助けでも大歓迎です。

0 投票する
1 に答える
395 参照

android - ジャックはコード自体を難読化していないようです

Android Studio バージョンを使用v2.1.2Proguardていますが、リリース ビルドに署名しようとしても動作しません。ビルドは劇的に失敗します。

開発者ドキュメントのこのリンクによると、 Jack は自動的に難読化を行います。

圧縮、難読化、再パッケージ化、マルチデックスを処理 ProGuard などの別のパッケージを使用する必要はなくなりました。

フラグを無効にしてminifyEnabled、proguard ファイルをロードする行を削除する必要がありました。これを行った後、それを機能させるために; 上記を実行して生成されたファイルを調べたところ、リリースサイズがデバッグ サイズと同じであるため、apkJack が本当に冗長なコードを難読化して削減したかどうかはわかりません。apkapk

ドキュメントが実際には役に立たないため、新しいコンパイラで難読化を機能させる方法を理解する必要があります。

以下の質問を理解できることを楽しみにしています。

ファイルJackなしで動作しますか?Proguard

ファイルを指定する方法はありProguardますか?

0 投票する
3 に答える
5051 参照

android - エラー: データ バインディングはまだ Jack ビルドをサポートしていません

を実装DataBindingしています。完璧に機能していますが、使用できませんjackOptionsData Binding does not support Jack builds yetビルド中にエラーがスローされます。

これが私のbuild.gradle

0 投票する
0 に答える
279 参照

android - ジャックの翻訳されたラムダ式は、minSdkVersion が 24 に設定されている場合、より効率的なアプローチを使用しません

私は現在、jackコンパイラがラムダ式のために生成するバイトコードを見ています。

例として、次のプレーン Java クラスを見てみましょう。

JDK 1.8 を使用javacすると、次のバイトコードが生成されます。

ドキュメントに従って、ラムダ式のバイトコードへのinvokedynamic call site変換は、16 行目で生成し、ラムダ式の本体を静的メソッドに変換することによって実行されます。

では、についてお話しましょうjack。一般に、ラムダをminSdkVersion24 未満でコンパイルすると、jackコンパイラは匿名クラスを生成します。これは、1.6/1.7 に基づく以前のランタイムとの後方互換性のためです。

しかし、ラムダminSdkVersionを 24 に設定してコンパイルするとどうなるでしょうか?
これに答えるために、(上記の Java サンプルと同様に) 同じラムダ式を作成しjack、Android 環境でコンパイルしました。

この場合、Android 7.0 のランタイムは 1.8 に基づいているため、jackより効率的で最適化されたコード (JVM の作成およびラムダ ボディ ヘルパー メソッドの生成に似たもの) を生成することを期待していました。 命令オペランドが Dalvik と ART のどちらでもサポートされていないことはわかっていましたが、より最適化されたメカニズムがあると考えていました。それ以外の場合、Android でのラムダ式のサポートは単なる構文糖衣です。 invokedynamic call site
invokedynamic

代わりに、生成されたバイトコードには同じ匿名クラスが含まれていました。

おそらくJVMの機能jackに似た、より効率的なものではなく、コンパイラがバイトコードでラムダ式を表すために匿名クラスアプローチを使用するのはなぜですか?invokedynamic