最近在学习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;
}
}
}