_低头的麦穗 2015-05-21 14:16 采纳率: 0%
浏览 4028
已结题

android proguard混淆后,效果和原来的不一致

最近在学习android proguard,但是看了很多的博客和demo,自己练手的时候出现的问题久久不会解决,郁闷已久,虽求助大家。

问题描述:一个android动画的demo,没有混淆之后效果都能实现,但是混淆之后动画效果都没有效果了。

我引用了一个第三方jar包:afinal_0.5.1_bin.jar

proguard-project.txt:
-dontoptimize
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-dontwarn
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-keepattributes InnerClasses,LineNumberTable

-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

-keep class net.tsz.afinal.**{*;}
-keep class android.webkit.**{*;}

-keepclasseswithmembernames class * {
native ;
}

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

-keepclasseswithmembers class * {
public (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 **.R$* {

*;

}

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

 package com.example.animation;

import net.tsz.afinal.FinalActivity;
import net.tsz.afinal.annotation.view.ViewInject;
import android.content.Intent;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.view.View;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends FinalActivity {
    @ViewInject(id = R.id.btn_scale_anim, click = "onClick")
    private Button mBtnScale;
    @ViewInject(id = R.id.btn_alpha_anim, click = "onClick")
    private Button mBtnAlpha;
    @ViewInject(id = R.id.btn_rotate_anim, click = "onClick")
    private Button mBtnRotate;
    @ViewInject(id = R.id.btn_translate_anim, click = "onClick")
    private Button mBtnTranslate;
    @ViewInject(id = R.id.btn_continue_one, click = "onClick")
    private Button mBtnContinueOne;
    @ViewInject(id = R.id.btn_continue_two, click = "onClick")
    private Button mBtnContinueTwo;
    @ViewInject(id = R.id.btn_flash, click = "onClick")
    private Button mBtnFlash;
    @ViewInject(id = R.id.btn_shake, click = "onClick")
    private Button mBtnShake;
    @ViewInject(id = R.id.btn_switch, click = "onClick")
    private Button mBtnSwitch;
    @ViewInject(id = R.id.btn_layout, click = "onClick")
    private Button mBtnLayout;
    @ViewInject(id = R.id.btn_frame, click = "onClick")
    private Button mBtnFrame;
    @ViewInject(id = R.id.btn_shake, click = "onClick")
    private Button mBntShake;
    @ViewInject(id = R.id.iv_image)
    private ImageView mIvImage;

    private Animation mAnim;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void onClick(View v) {
        switch (v.getId()) {
        // 缩放
        case R.id.btn_scale_anim:
            mAnim = AnimationUtils.loadAnimation(this, R.anim.scale);
            mIvImage.startAnimation(mAnim);
            break;
        // 透明度
        case R.id.btn_alpha_anim:
            mAnim = AnimationUtils.loadAnimation(this, R.anim.alpha);
            mIvImage.startAnimation(mAnim);
            break;
        // 平移
        case R.id.btn_translate_anim:
            mAnim = AnimationUtils.loadAnimation(this, R.anim.translate);
            mIvImage.startAnimation(mAnim);
            break;
        // 旋转
        case R.id.btn_rotate_anim:
            mAnim = AnimationUtils.loadAnimation(this, R.anim.rotate);
            mIvImage.startAnimation(mAnim);
            break;
        // 组合动画,用监听器的方式
        case R.id.btn_continue_one:
            mAnim = AnimationUtils.loadAnimation(this, R.anim.translate);
            mIvImage.startAnimation(mAnim);
            final Animation tAnim = AnimationUtils.loadAnimation(this, R.anim.rotate);
            mAnim.setAnimationListener(new AnimationListener() {

                @Override
                public void onAnimationStart(Animation animation) {
                }

                @Override
                public void onAnimationRepeat(Animation animation) {
                }

                @Override
                public void onAnimationEnd(Animation animation) {
                    mIvImage.startAnimation(tAnim);
                }
            });
            break;
        // 组合动画,用xml文件的方式
        case R.id.btn_continue_two:
            mAnim = AnimationUtils.loadAnimation(this, R.anim.continue_two);
            mIvImage.startAnimation(mAnim);
            break;
        // 闪动效果
        case R.id.btn_flash:
            AlphaAnimation alphaAnim = new AlphaAnimation(0.1f, 1.0f);
            alphaAnim.setDuration(100);
            alphaAnim.setRepeatCount(10);
            alphaAnim.setRepeatMode(Animation.REVERSE);
            mIvImage.startAnimation(alphaAnim);
            break;
        // 两个activity跳转的动画效果
        case R.id.btn_switch:
            startActivity(new Intent(this, SecondActivity.class));
            overridePendingTransition(R.anim.aty_in, R.anim.aty_out);
            break;
        // 布局动画
        case R.id.btn_layout:
            startActivity(new Intent(this, ListActivity.class));
            break;
        // 帧动画
        case R.id.btn_frame:
            // 怎么控制帧动画的重复次数
            mIvImage.setImageResource(R.drawable.anim_list);
            AnimationDrawable animDrawable = (AnimationDrawable) mIvImage.getDrawable();
            animDrawable.start();
            break;
        case R.id.btn_shake:
            TranslateAnimation translateAnim = new TranslateAnimation(-10, 10, -10, 10);
            translateAnim.setDuration(30);
            translateAnim.setRepeatCount(10);
            translateAnim.setRepeatMode(Animation.REVERSE);
            mIvImage.startAnimation(translateAnim);
            break;
        }
    }
}

  • 写回答

7条回答 默认 最新

  • bdmh 移动开发领域优质创作者 2015-05-21 14:19
    关注

    一些需要通过反射实现的东西,就不要混淆了,否则找不到类了,你可以尝试吧这个动画类不要混淆

    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题