ProGuardをコマンドラインから実行する方法を知りたいと思います。ProGuardをAndroidスタジオなしで使用する
私はIonicフレームワークでCordovaを使用してハイブリッドアプリを構築しました。私の推奨事項の1つは、ProGuardを使用してJavaコードを難読化し、ログ呼び出しを削除することでした。
私は現在AndroidスタジオまたはEclipseを使用していません。私は、Ionic FrameworkとAngular 1.Xでプロジェクトを構築し、デバイス上の機能に必要なCordovaプラグインを使用しています。私はJenkinsにコマンドラインから私のリリースをビルドさせる。
私はここにレイアウトされた手順に従ってみました: https://developer.android.com/studio/build/shrink-code.html#keep-code 、ここで: Disable LogCat Output COMPLETELY in release Android app?
と同様に適用可能なビットを見つけるために、様々な質問/回答を通じてコーミング。
私のbuild.gradleは./vendorディレクトリに保存され、Ionicから自動生成された/ default build.gradleを上書きするためにコピーされます。 これは、ProGuardのを可能にするためにこれを持っている:
buildTypes {
debug {
debuggable true
minifyEnabled false
}
release {
signingConfig signingConfigs.release
debuggable false
minifyEnabled true
runProguard true
proguardFile 'customProGuard.txt'
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-android.txt'
}
}
私も私のproject.propertiesファイルに次の行のさまざまなバージョンを試してみた:それは何もされていないよう proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
またはproguard.config=${sdk.dir}/tools/proguard/proguard-android-optimize.txt:proguard-project.txt
。私はapkのファイルサイズが一点で変わったと思っていましたが、JD-GUIのクラスを見ると、私はまだ事をはっきりと識別することができます。だから私はそれが実行されているとは思わない。どんな助けもありがとう。
ジェンキンスさんは、次のコマンドを実行します:
cp -R vendor/build.gradle platforms/android/build.gradle
ionic resources
ionic prepare android
ionic build android --release
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore $KEYSTORE platforms/android/build/outputs/apk/android-release-unsigned.apk
-keypass $KEY_PASSWORD -storepass $KEYSTORE_PASSWORD $ALIAS && \ ./zipalign -v 4 platforms/android/build/outputs/apk/android-release-unsigned.apk "build/appNameHere.apk"
「イオンビルドアンドロイド--releaseは」最終的にビルドを参照する複数の行を持つ./platforms/android/cordova/lib/builders/GradleBuilder.jsを呼び出している間。 Gradleでは、私はメインの最も重要な一つは、それがGradleBuilder.buildで使用するファイルを読み込んでいるvar buildGradle = fs.readFileSync(path.join(this.root, 'build.gradle'), 'utf8');
ていると思う:
GradleBuilder.prototype.build = function(opts) {
var wrapper = path.join(this.root, 'gradlew');
var args = this.getArgs(opts.buildType == 'debug' ? 'debug' : 'release', opts);
return Q().then(function() {
return spawn(wrapper, args, {stdio: 'inherit'});
});
};
ジェンキンスが実行しているgradleコマンドと出力の一部を入力してください。 –
@StefanCrain:Jenkinsが使用するコマンドと、Gradleとの関係をどのように信じているかを追加しました。アウトプットが出る限り、私は何が関係しているか分からなかった。 'JAVA_HOME =/Library/Java/JavaVirtualMachines/jdk1.7.0_79。JDK /コンテンツ/ホーム :事前に作成 :preReleaseBuild :checkReleaseManifest :CordovaLib:compileLint :CordovaLib:CordovaLib:UP-TO-DATE copyReleaseLint mergeReleaseProguardFiles UP-TO-DATE'等... 'SUCCESSFUL を構築合計時間:12.435秒 次のapkをビルドしました: 'できれば' jarが署名されました。 build/appNameHere.apk(4)のアラインメントの確認... 50 META-INF/MANIFEST.MF(OK-compressed) ' –