Я хотел бы знать, как запустить ProGuard из командной строки.Использование ProGuard WITHOUT Android Studio
Я построил гибридное приложение, использующее Кордову с ионной структурой. Одна из рекомендаций, сделанных мне, заключалась в использовании ProGuard для обфускации кода Java и удаления вызовов журнала.
В настоящее время я не использую Android Studio или 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?
Как расчесывать через различные вопросы/ответы, чтобы найти применимые биты.
My build.gradle хранится в каталоге ./vendor и скопирован для перезаписывания автогенерированного/default build.gradle из Ionic. имеет это для благоприятной 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, но я думаю, что главное наиболее важным из которых является var buildGradle = fs.readFileSync(path.join(this.root, 'build.gradle'), 'utf8');
, в котором он читает в файле для использования с GradleBuilder.build:
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'});
});
};
Можете ли вы предоставить команду градиента, которую выполняет Дженкинс, и некоторые из результатов? –
@StefanCrain: Я добавил команды, которые использует Дженкинс, а также то, как я считаю, что он связан с Gradle. Что касается выхода, я не был уверен, что уместно? 'JAVA_HOME =/Library/Java/JavaVirtualMachines/jdk1.7.0_79.JDK/Содержание/Главная : preBuild : preReleaseBuild : checkReleaseManifest : CordovaLib: compileLint : CordovaLib: copyReleaseLint UP-TO-DATE : CordovaLib: mergeReleaseProguardFiles UP-TO-date' и т.д ... 'BUILD УСПЕШНЫЙ Общее время: 12.435 secs Построено следующее apk (s): 'finally' jar подписан. Проверка выравнивания build/appNameHere.apk (4) ... 50 META-INF/MANIFEST.MF (OK - сжатый) ' –