編輯:關於Android編程
android APK防止反編譯:
在android2.3之後的版本新建項目中會自動生成proguard.cfg和project.properties文件,proguard.cfg文件是混淆java代碼的配置文件,裡面對不需要混淆代碼的類文件進行配置過濾,project.properties文件裡設置android項目對應的版本和proguard.cfg的路徑。
1.貼上自動生成的proguard.cfg文件的內容:
-optimizationpasses 5
-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 *;
}
<-----------系統默認proguard.cfg說明--------------------->
For some situations, the default configurations in the proguard.cfg file will suffice. However, many situations are hard for ProGuard to analyze correctly and it might remove code that it thinks is not used, but your application actually needs. Some examples include:
a class that is referenced only in the AndroidManifest.xml file(AndroidManifest.xml文件中的引用類)
a method called from JNI(JNI調用的方法)
dynamically referenced fields and methods(動態引用的字段和方法)
<-----------系統默認proguard.cfg說明--------------------->
從上面的配置代碼可以看出對Activity,Application,Service,BroadcastReceiver,ContentProvider,BackupAgentHelper,Preference,ILicensingService的子類不做代碼混淆處理(這些類可能被其他應用或系統應用調用)。混淆之後應用出現如ClassNotFoundException異常,可以在此文件中添加過濾混淆代碼:
-keep public class <MyClass>
2.在project.properties文件:
# This file is automatically generated by Android Tools.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must be checked in Version Control Systems.
#
# To customize properties used by the Ant build system edit
# "ant.properties", and override values to adapt the script to your
# project structure.
#
# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
# Project target.
target=android-10
3.App簽名
簽名主要用到的是JDK中提供的簽名工具keytool(路徑:your jdk path/bin/keytool)
keytool生成key.keystore簽名文件的命令參數
Keytool Option Description
-genkey 獲得密鑰對(私有密鑰和公共密鑰)
-v 啟用詳細輸出
-alias <alias_name> 別名
-keyalg <alg> 使用生成密鑰的加密算法
-keysize <size> 密鑰長度
-dname <name>
創建密鑰的描述
-keypass <password>
密鑰密碼
-validity <valdays>
密鑰有效期
Note:推薦使用大於等於10000
-keystore <keystore-name>.keystore 輸出生成密鑰的.keystore文件保存路徑
-storepass <password>
密鑰庫密碼,與-keypass對應
有了以上命令參數,下面執行命令進行應用簽名(以下為例):
keytool -genkey -v -keystore my-release-key.keystore
-alias alias_name -keyalg RSA -keysize 2048 -validity 10000
執行過程中有一些提示輸入信息,輸入完成後.keystore文件生成完畢。
4.導出混淆的簽名應用
右擊項目:Android Tools--------------------->Export sined application package
選擇上一步生成的簽名文件(.keystore)和輸入密鑰庫密碼,點擊下一步,選擇填寫Alias別名和密鑰密碼----->導出APK對應的路徑-------->finish
到處截屏以後貼上。
查看驗證APK簽名:同樣是JDK工具jarsigner
jarsigner -verify my_signed.apk
如果出現的是CN=Android Debug,說明是調試密鑰生成簽名的apk
這樣一個混淆代碼後的簽名APK制作完畢。
Native原生相比於Hybrid或H5最大優點是具有流暢和復雜的交互效果,觸摸事件便是其中重要一項,包括點擊(Click)、長按(LongClick)、手勢(gestu
最近搞一個項目,需要用到類似於新浪微博的消息流,即每一項有文字、有九宮格圖片,因此這就涉及到ListView或者ScrollView嵌套GridView的問題。其中Gri
啥也不說看圖: 點擊後效果: 代碼:主方法: package com.text.ac; import java.util.Calend
之前對線程也寫過幾篇文章,不過倒是沒有針對android,因為java與android在線程方面大部分還是相同,不過本篇我們要介紹的是android的專屬類Handler