android 混淆jar及apk的心得

Android代码混淆,如何过滤掉反射的R文件及第三方包?
解决方案:在Proguard.cfg方件中添加以下设定:

  • 过滤R文件的混淆:
-keep class **.R$* {   *;  }

  • 过滤第三方包的混淆:
-keep class packagename.** {*;}(其中packagename为第三方包的包名)

Android导入第三方jar包,proguard混淆脚本(屏蔽警告,不混淆第三方包)
最近1个项目中 需要导入移动MM的第三方计费包,混淆时用到了如下脚本,可屏蔽警告,不混淆第三方包指定内容。
非常有效

proguard.cfg 文件

-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-ignorewarnings //这1句是屏蔽警告,脚本中把这行注释去掉
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
/ /这1句是导入第三方的类库,防止混淆时候读取包内容出错,脚本中把这行注释去掉
-libraryjars libs/mmbilling.jar 
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService
-keepclasseswithmembernames class * {
    native <methods>;
}
-keepclasseswithmembernames class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembernames class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}

//这4句是不混淆第三方包中的指定内容,脚本中把这行注释去掉  -keep class com.ccit.** {*; }   
-keep class ccit.** { *; }
-keep class com.aspire.**

-keep class mm.vending.**



今天在打包混淆的时候,因为使用了android-support-v4而发生混淆错误,无法打包,网上google了一下,没发现可用的,就东拼西凑的把网上各个版本拼凑了下,拼凑出下面自己可用通过的代码。
在proguard.cfg中加入以下代码:
-libraryjars   libs/android-support-v4.jar //这里根据你的jar包的路径做改动
-dontwarn android.support.v4.**  
-keep class android.support.v4.** { *; }
-keep interface android.support.v4.app.** { *; }
-keep public class * extends android.support.v4.**
-keep public class * extends android.app.Fragment


不混淆webview中对javascript接口

-keep public class com.igrs.dlna.activity.webviewActivity.JavaScriptInterface
-keepclassmembers class com.igrs.dlna.activity.webviewActivity.JavaScriptInterface{
void showSource(java.lang.String,java.lang.String);

-keepclassmembers class com.igrs.dlna.activity.webviewActivity$InJavaScriptLocalObj { 
    public void showSource(java.lang.String,java.lang.String);
    public void showTitle(java.lang.String);
}

/

混淆android的jar包配置文件proguard.cfg如下

-injars libs\your_library.jar
-outjars libs\your_library_out.jar

-libraryjars 'E:\program_tools\android-sdk\platforms\android-9\android.jar'

-optimizationpasses 5
-dontusemixedcaseclassnames
-ignorewarning
-dontskipnonpubliclibraryclasses
-dontoptimize
-verbose

-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService

-keepclasseswithmembernames class * {
    native <methods>;
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}

-keepclassmembers class * extends android.app.Activity {
   public void *(android.view.View);
}

-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}


如上的红色文字非常重要

-injars 表示你要混淆的jar文件

-outjars 是混淆后的jar文件名

-libraryjars 是混淆时需要引用的android库

-ignorewarning 表示混淆时忽略所以的警告

-dontoptimize 不进行优化,这句代码非常重要。并且配置中不能有-dontpreverify字段;-dontpreverify在混淆jar时没有问题但是在apk应用中使用该jar后对apk进行混淆时就会失败。


如果项目中使用了jar库,则proguard.cfg文件的配置如下
-optimizationpasses 2
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService

-keepclasseswithmembernames class * {
    native <methods>;
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}

-keepclassmembers class * extends android.app.Activity {
   public void *(android.view.View);
}

-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}

上面的配置中 -optimizationpasses 只能为1,2;3以上混淆就会出错!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 将Android Studio项目打包为APK是将开发的应用程序编译、构建、打包成Android应用程序包的过程。Android应用程序包(APK)是一种可供安装和分发的Android应用程序文件格式。 要将Android Studio项目打包为APK,首先需要在项目中设置一些必要的配置。在项目的build.gradle文件中,设置应用程序的版本号、应用程序ID、签名等信息。还需要在AndroidManifest.xml文件中定义应用程序的权限、活动、服务等组件。 完成项目配置后,选择“Build”菜单中的“Build Bundle(s) / APK(s)”选项,Android Studio将会开始构建应用程序并生成APK文件。构建过程中会进行编译、资源压缩、代码混淆、资源处理等操作。构建完成后,Android Studio会在项目的输出目录下生成APK文件。 生成的APK文件可以进行安装和分发。可以选择将APK文件直接安装到Android设备上进行测试,也可以将APK文件上传到应用商店或通过其它方式分发给用户。用户可以根据自己的需求选择在设备上安装APK文件。 总结来说,通过Android Studio的打包APK功能,我们可以方便地将开发的应用程序打包成Android应用程序包,供安装和分发使用。这是开发Android应用程序的重要步骤,也是将应用程序推向用户的关键步骤之一。 ### 回答2: Android Studio是一款用于开发Android应用程序的集成开发环境(IDE)。要将项目打包为APKAndroid应用包)文件,首先需要创建一个项目并在Android Studio中编写和调试代码。完成代码编写后,可以按照以下步骤打包APK文件。 1. 在Android Studio的工具栏中,点击"Build"(构建)选项。 2. 在下拉菜单中,选择“Build Bundle(s) / APK(s)”。 3. 在弹出的对话框中,选择“Build APK(s)”选项。 4. Android Studio将自动编译和构建项目,并在“Build”目录下生成一个APK文件。 5. 在“Build”目录下,找到生成的APK文件并将其复制到设备或模拟器上进行安装和测试。 值得注意的是,APK文件生成后,您还可以通过调试版本和发布版本之间的选择来进行特定配置。如果您计划将应用程序发布到Google Play商店或其他应用商店,建议使用发布版本。发布版本会对APK文件进行优化和压缩,以便更好地适应不同设备类型和操作系统版本。 通过以上步骤,您就可以将Android Studio项目打包为APK文件,方便部署和在设备上安装使用了。希望这个回答对您有所帮助。 ### 回答3: Android Studio是一款功能强大的集成开发工具(IDE),用于开发Android应用程序。要将Android项目打包为APK文件,需要按照以下步骤操作: 1. 打开Android Studio,并导入你的项目。 2. 在项目结构视图中,右键单击项目文件夹,然后选择“Open Module Settings”(打开模块设置)。 3. 在弹出的面板中,选择“Build Variants”(构建变体)选项卡。 4. 在构建变体选项卡中,选择要打包的构建变体。一般情况下,通常选择“release”(发布)变体,因为它是一个已经优化和混淆的版本。 5. 确保已经为发布变体选择了正确的签名配置文件,并设置了正确的密钥别名和密码。如果没有正确的签名配置文件,请创建一个新的签名配置文件。 6. 单击“Build”(构建)菜单,然后选择“Build Bundle(s) / APK(s)”(构建包/ APK)选项。 7. 在弹出的对话框中,选择“APK(s)”选项,并单击“Next”(下一步)。 8. 等待Android Studio完成构建APK文件的过程。一旦完成,将会在项目路径下的“app/build/outputs/apk”目录中生成APK文件。 9. 导航到生成的APK文件所在的目录,并将其拷贝到您想要的位置。 通过按照上述步骤操作,您就可以将Android项目打包为APK文件,以便在Android设备上安装和使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值