【发布时间】:2020-11-23 02:34:48
【问题描述】:
我想知道如何从命令行运行 ProGuard。
我使用 Cordova 和 Ionic 框架构建了一个混合应用程序。向我提出的建议之一是使用 ProGuard 来混淆 java 代码并删除 Log 调用。
我目前没有使用 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?
以及梳理各种问题/答案以找到适用的位。
我的 build.gradle 保存在 ./vendor 目录中并复制以覆盖 Ionic 自动生成的/默认的 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 中的类时,我仍然可以清楚地辨别出一些东西。所以我不认为它正在运行。任何帮助将不胜感激。
Jenkins 运行以下命令:
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"
虽然 'ionic build android --release' 最终会调用 ./platforms/android/cordova/lib/builders/GradleBuilder.js,其中有几行引用 build.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'});
});
};
【问题讨论】:
-
能否请您提供 Jenkins 正在执行的 gradle 命令以及一些输出?
-
@StefanCrain:我添加了 Jenkins 使用的命令,以及我认为它与 Gradle 的关系。就输出而言,我不确定什么是相关的?
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home :preBuild :preReleaseBuild :checkReleaseManifest :CordovaLib:compileLint :CordovaLib:copyReleaseLint UP-TO-DATE :CordovaLib:mergeReleaseProguardFiles UP-TO-DATE等等...BUILD SUCCESSFUL Total time: 12.435 secs Built the following apk(s):最终jar signed. Verifying alignment of build/appNameHere.apk (4)... 50 META-INF/MANIFEST.MF (OK - compressed) -
你可以使用cordova-plugin-proguard alfilatov.com/posts/…
标签: android cordova ionic-framework proguard cordova-plugin-proguard