編輯:關於Android編程
加入代碼混淆器,主要是加入proguard-project.txt文件的規則進行混淆,之前新建Android程序是proguard.cfg文件
可以看一下我采用的通用規則(proguard-project.txt文件)
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-keepattributes *Annotation*
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable
# 以下兩個命令配合讓類的路徑給刪除了
-allowaccessmodification
-repackageclasses ”
# 記錄生成的日志數據,在 proguard 目錄下
-dump class_files.txt
-printseeds seeds.txt
-printusage unused.txt
-printmapping mapping.txt
# 異常都可以忽略就打開
#-dontwarn
-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
-dontnote com.android.vending.licensing.ILicensingService
-keepnames class * implements java.io.Serializable
# Explicitly preserve all serialization members. The Serializable interface
# is only a marker interface, so it wouldn’t save them.
-keepclassmembers class * implements java.io.Serializable {
static final long serialVersionUID;
private static final java.io.ObjectStreamField[] serialPersistentFields;
private void writeObject (java.io.ObjectOutputStream);
private void readObject (java.io.ObjectInputStream);
java.lang.Object writeReplace ();
java.lang.Object readResolve ();
}
# Preserve all native method names and the names of their classes.
#-keepclasseswithmembernames class * {
# native ;
#}
#-keepclasseswithmembernames class * {
# public (android.content.Context, android.util.AttributeSet);
#}
#-keepclasseswithmembernames class * {
# public (android.content.Context, android.util.AttributeSet, int);
#}
# Preserve static fields of inner classes of R classes that might be accessed
# through introspection.
#-keepclassmembers class **.R$* {
# public static ;
#}
# Preserve the special static methods that are required in all enumeration classes.
-keepclassmembers enum * {
public static **[] values ();
public static ** valueOf (java.lang.String);
}
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
# 如果你的工程是對外提供方法調用就打開
#-keep public class * {
# public protected *;
#}
如果還有規則就加在後面
另外,我們一般需要混淆的是自己寫的代碼,引入的第三方庫文件是不需要混淆的,否則會出現如下錯誤:

就是找不到所需要的類。所以第三方庫需要指出來不混淆,方法如下:<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+yc/D5srHYW5kcm9pZC5zdXBwb3J0LnY0LqHB1dKyu7W9y/nQ6MDgo6yy6b+00v3I67/itcSw/MP7PC9wPgo8aW1nIHNyYz0="/uploadfile/Collfiles/20141115/2014111508270446.png" alt="\">
在proguard-project.txt後面加上
-dontwarn android.support.v4.**
-keep class android.support.v4.** { *; }
第一句是忽略這個警告,第二句是保持類不混淆
把你所有引入的第三方庫弄完後,在project.properties文件裡加上一句
proguard.config=proguard-project.txt
就可以編譯了(怎麼編譯?)
編譯後,可以在bin裡看到混淆代碼的apk文件,是不是文件變小了,多爽!
同時,在bin/proguard文件夾裡多了幾個文件

其中,mapping.txt就是所有混淆的類及變量名的前後參照,usage.txt是你在代碼中沒用到的方法,都給你列出來了,是優化後的結果。
Android TextView中文字通過SpannableString設置屬性用法示例
本文實例講述了Android TextView中文字通過SpannableString設置屬性的方法。分享給大家供大家參考,具體如下:在Android中,TextView
android開發筆記之適配器
大家看到這個標題是不是覺得很詫異呢?什麼叫終極適配器,其實就是這種適配器是萬能的,所有需要使用適配器的組件,都可用這一個適配器就行。既然這樣,就來講講吧。效果:當然這是個
另外兩種Android沉浸式狀態欄實現思路
關於沉浸式狀態欄相信大家都不陌生,IOS系統很早就有,android5.0及以後版本都支持給狀態欄著色,而目前android主流版本還是4.4,網上通用實現4.4(API
Android筆記之網絡-基本了解
1、3個相關API接口 Android網絡編程相關的API接口與相關用途如下圖 2、 2種網絡架構模式 B/S----浏覽器/服務器端模式