## 自定義Application ##android
- 寫一個demo緩存
/**
* 自定義全局Application 應用全局的初始化邏輯能夠放在此處運行
* 這是一個單例類, 整個應用只有一個
* @author Kevin
*/
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
System.out.println("MyApplication onCreate");
}
public void doSomething() {
System.out.println("doSomething....");
}
}安全
----------------------服務器
public class MainActivity extends Activity {app
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
System.out.println("MainActivity onCreate");
MyApplication app = (MyApplication) getApplication();// 獲取自定義的Application
app.doSomething();
}
}ide
----------------------佈局
清單文件中配置網站
<application
android:name=".MyApplication".net
- 手機衛士自定義Application3d
MobileSafeApplication
## 全局捕獲異常 ##
- 模擬異常, 好比int i = 1/0, 演示崩潰狀況
- 代碼實現
/**
* 自定義全局Application
*
* @author Kevin
*
*/
public class MobileSafeApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
// 設置未捕獲異常處理器
Thread.setDefaultUncaughtExceptionHandler(new MyUncaughtExceptionHandler());
}
class MyUncaughtExceptionHandler implements UncaughtExceptionHandler {
// 未捕獲的異常都會走到此方法中
// Throwable是Exception和Error的父類
@Override
public void uncaughtException(Thread thread, Throwable ex) {
System.out.println("產生了一個未處理的異常, 可是被哥捕獲了...");
// 將異常日誌輸入到本地文件中, 找機會上傳到服務器,供技術人員分析
File file = new File(Environment.getExternalStorageDirectory(),
"error.log");
try {
PrintWriter writer = new PrintWriter(file);
ex.printStackTrace(writer);
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
// 結束當前進程
android.os.Process.killProcess(android.os.Process.myPid());
}
}
}
## 代碼混淆 ##
- 代碼未混淆的前提下,打包,並進行反編譯, 發現源碼均可以看到, 很不安全
- 找到項目根目錄下的文件project.properties, 打開混淆註釋
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
- 分析文件proguard-android.txt
- 將proguard-android.txt文件拷貝到項目根目錄,方便之後修改
proguard.config=proguard-android.txt:proguard-project.txt
- 從新打包並反編譯,查看效果
- 結論: 混淆後,會將類名,方法名編譯成a,b,c,d等混亂的字母, 提升代碼閱讀成本,加強安全性
- 注意: 混淆後致使某些功能沒法正常運行, 好比涉及到aidl文件的幾個模塊, 包括緩存清理,掛斷電話.須要在配置文件中增長以下配置:
-keep class android.content.pm.** {
*;
}
或者
-keep public class android.content.pm.IPackageDataObserver { *;}
-keep public class android.content.pm.IPackageStatsObserver { *;}
-keep public class android.content.pm.PackageStats { *;}
-keep public class android.telephony.NeighboringCellInfo { *;}
-keep public class com.android.internal.telephony.ITelephony { *;}
過濾掉全部android包名下的aidl文件, 就能保證正常運行了.
## 嵌入廣告 ##
- 分析app, 廣告公司, 廣告平臺的關係
廣告平臺至關於中間商, 是app和廣告公司的媒介, 抽成盈利
- 盈利方式
- 展現次數, 1000次 1毛5左右 ,
- 點擊次數, 1次 1毛5左右
- 有效點擊, 1次 1元左右
50 0000用戶 展現50 0000次 500 * 0.15元 75塊
- 廣告公司
有米, 百度, 360, 萬普, panda
- 國外廣告公司
StartApp
- 項目演示
- 在有米網平臺網站上建立應用, 生成app id
- 下載SDK, 查看SDK文檔
- 按照文檔流程配置本地代碼
- 導入jar包
- 配置清單文件
- 在主頁面添加初始化代碼
// 初始化廣告sdk, 輸入用戶id和app id
// 有米廣告
AdManager.getInstance(getApplicationContext()).init("e8d85a704956ee3d",
"0f78058c84a83592", true);
- 在主頁面佈局文件中配置廣告控件 - 混淆時注意跳過廣告sdk驗證, 由於廣告sdk已經通過了混淆,再混淆的話會出錯