蒲公英Android安卓SDK是一款蒲公英應(yīng)用內(nèi)測專家的安卓SDK,我們的SDK,你們自己的風(fēng)格。蒲公英SDK為你準(zhǔn)備了多種自定義的方式,讓你手機(jī)反饋的方式更加貼近你的產(chǎn)品。
Android SDK 集成指南
冊應(yīng)用獲取 App ID
App ID:唯一標(biāo)識一個(gè)應(yīng)用的 ID,在蒲公英上的每一個(gè) App 都有一個(gè)唯一的 App ID,開發(fā)者可以在應(yīng)用管理頁面首頁查看。
導(dǎo)入SDK
Eclipse用戶
下載蒲公英 Android SDK(包含異常上報(bào),在線更新,搖一搖反饋等功能)。
將 jar 包復(fù)制到工程的 libs 目錄下面。
Android Studio用戶 添加代碼到project下的build.gradle文件中:
allprojects{ repositories{ jcenter() maven{url"https://raw.githubusercontent.com/Pgyer/mvn_repo_pgyer/master"} } }
然后在module下的build.gradle文件中添加依賴即可:
dependencies{ compile'com.pgyersdk:sdk:2.4.0' }
Android Studio工程示例代碼
Android Studio用戶除了可以使用以上方法集成SDK外,也可以使用和Eclipse用戶相同的方法來集成SDK。
配置 AndroidManifest
<!--必選--> <uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/><!--獲取網(wǎng)絡(luò)狀態(tài)--> <uses-permissionandroid:name="android.permission.INTERNET"/><!--網(wǎng)絡(luò)通信--> <uses-permissionandroid:name="android.permission.READ_PHONE_STATE"/><!--獲取設(shè)備信息--> <uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/><!--獲取MAC地址--> <uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/><!--讀寫sdcard,storage等等--> <uses-permissionandroid:name="android.permission.RECORD_AUDIO"/><!--允許程序錄制音頻--> <!--可選--> <uses-permissionandroid:name="android.permission.READ_LOGS"/><!--獲取logcat日志--> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme"> <!--可選--> <activityandroid:name="com.pgyersdk.activity.FeedbackActivity"/> <!--必選--> <meta-data android:name="PGYER_APPID" android:value="4b6e8877dfcc2462bedb37dcf66b6d87"> </meta-data> </application>
上報(bào) Crash 異常
一、注冊Crash接口(必選)
在 application 中集成,可以有機(jī)會捕捉更多的異常(推薦)
importcom.pgyersdk.crash.PgyCrashManager; importandroid.app.Application; publicclassPgyApplicationextendsApplication{ @Override publicvoidonCreate(){ //TODOAuto-generatedmethodstub super.onCreate(); PgyCrashManager.register(this); } }
在 AndroidManifest.xml 注意修改 android:name=".PgyApplication"此處的名字對應(yīng)上面繼承 Application 的類名
<application android:name=".PgyApplication" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme"> </application>
2. 在 activity 中集成
importcom.pgyersdk.crash.PgyCrashManager; publicclassMainActivityextendsActivity{ @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); PgyCrashManager.register(this); } }
3. 解除注冊可以調(diào)用一下方法:
PgyCrashManager.unregister();
二、符號表配un置(可選)
通過 progurad 工具混淆時(shí),工程目錄下會自動生成符號表文件 mapping.txt
在后臺配置符號表文件
上報(bào) catch 異常
try { } catch(Exceptione) { PgyCrashManager.reportCaughtException(MainActivity.this,e); }
搖一搖用戶反饋
普通的應(yīng)用在 Activity 中添加如下代碼即可
importcom.pgyersdk.feedback.PgyFeedbackShakeManager; publicclassMainActivityextendsActivity{ @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override protectedvoidonResume(){ //TODOAuto-generatedmethodstub super.onResume(); //自定義搖一搖的靈敏度,默認(rèn)為950,數(shù)值越小靈敏度越高。 PgyFeedbackShakeManager.setShakingThreshold(1000); //以對話框的形式彈出 PgyFeedbackShakeManager.register(MainActivity.this); //以Activity的形式打開,這種情況下必須在AndroidManifest.xml配置FeedbackActivity //打開沉浸式,默認(rèn)為false //FeedbackActivity.setBarImmersive(true); PgyFeedbackShakeManager.register(MainActivity.this,false); } @Override protectedvoidonPause(){ //TODOAuto-generatedmethodstub super.onPause(); PgyFeedbackShakeManager.unregister(); } }
游戲還需要在 GLSurfaceView.Renderer 這個(gè)類的 public void onDrawFrame(final GL10 gl) 的方法中添加以下代碼
publicvoidonDrawFrame(GL10gl){ PgyFeedbackShakeManager.setGLSurface(true); GLSurfaceUtils.getInstance().takeScreenShot(gl); }
通過點(diǎn)擊按鈕的方式彈出反饋界面:
//以對話框的形式彈出 PgyFeedback.getInstance().show(MainActivity.this); //以Activity的形式打開,這種情況下必須在AndroidManifest.xml配置FeedbackActivity //打開沉浸式,默認(rèn)為false //FeedbackActivity.setBarImmersive(true); PgyFeedback.getInstance().showActiivty(MainActivity.this);
自定義反饋界面對話框title
PgyerDialog.setDialogTitleBackgroundColor("#ff0000"); PgyerDialog.setDialogTitleTextColor("#ffffff");
自定義反饋界面Activity
//設(shè)置頂部導(dǎo)航欄和底部bar的顏色 FeedbackActivity.setBarBackgroundColor("#ff0000"); //設(shè)置頂部按鈕和底部按鈕按下時(shí)的反饋色 FeedbackActivity.setBarButtonPressedColor("#ff0000"); //設(shè)置顏色選擇器的背景色 FeedbackActivity.setColorPickerBackgroundColor("#ff0000");
自定義反饋信息(不限制增加的數(shù)量)
PgyFeedback.getInstance().setMoreParam("tao","value");
將在用戶反饋的詳情界面看到自定義的數(shù)據(jù),如下圖:
檢查更新
默認(rèn)對話框的版本更新檢查
PgyUpdateManager.register(this);
帶回調(diào)的版本更新檢查
PgyUpdateManager.register(MainActivity.this, newUpdateManagerListener(){ @Override publicvoidonUpdateAvailable(finalStringresult){ //將新版本信息封裝到AppBean中 finalAppBeanappBean=getAppBeanFromString(result); newAlertDialog.Builder(MainActivity.this) .setTitle("更新") .setMessage("") .setNegativeButton( "確定", newDialogInterface.OnClickListener(){ @Override publicvoidonClick( DialogInterfacedialog, intwhich){ startDownloadTask( MainActivity.this, appBean.getDownloadURL()); } }).show(); } @Override publicvoidonNoUpdateAvailable(){ } });
解除注冊可以調(diào)用一下方法:
PgyUpdateManager.unregister();
result的格式為:
混淆
-libraryjarslibs/pgyer_sdk_x.x.jar -dontwarncom.pgyersdk.** -keepclasscom.pgyersdk.**{*;}
Android SDK 常見問題
傳的crash是那些?
Java運(yùn)行時(shí)沒有被Try Catched住從而導(dǎo)致JVM停止運(yùn)行的異常。
什么是Java的還原符號文件?
在使用Progurad工具進(jìn)行代碼混淆時(shí)會可以生成的mapping文件。
為什么要上傳Java還原符號文件?
產(chǎn)品發(fā)布的安裝包一般是經(jīng)過混淆處理的,這樣就會導(dǎo)致上報(bào)的異常堆棧中的類名和方法名是一種不可讀的方式(例如a.b()),我們需要通過Java還原符號表還原回真實(shí)的可讀的類名和方法名(例如:MyClass.myMehtod())。
kill -9、exit等會被當(dāng)成Crash上報(bào)嗎?
不會。
try catch的異常會被當(dāng)成Crash上報(bào)嗎?
不會。
App無響應(yīng)異常(ANR)能否捕獲?
不能。
彈出反饋頁面時(shí)截圖為什么沒有顯示?
請確認(rèn)在AndroidManifest.xml文件是否添加了android.permission.WRITE_EXTERNAL_STORAGE權(quán)限。
反饋頁面截圖怎么顯示的不是當(dāng)前的Activity界面?
當(dāng)應(yīng)用中使用了TabActivity、GroupActivity等包含多個(gè)Activity的集合類時(shí),不要在其OnResume()添加PgyFeedbackShakeManager.register(MainActivity.this, Constants.APPID);在其中的子Activity的OnResume()添加即可。
游戲反饋上傳的截圖為什么是黑色的?
請?jiān)趏nDrawFrame方法中添加:
PgyFeedbackShakeManager.setGLSurface(true); GLSurfaceUtils.getInstance().takeScreenShot(gl);
如何自定義更新提示對話框?
PgyUpdateManager.register(MainActivity.this, Constants.APPID,new UpdateManagerListener() { @Override public void onUpdateAvailable(String result) { // 彈出自定義對話框 } });
怎么樣測試app的更新功能已經(jīng)正常工作?
app集成sdk后打包上傳到蒲公英,然后手機(jī)掃二維碼安裝,當(dāng)同一個(gè)app有新的版本再次上傳到蒲公英時(shí),手機(jī)上打開以前安裝的這個(gè)app就會提示有新版本更新。
備注:集成sdk后,修改AndroidManifest.xml的android:versionCode值小于上傳到蒲公英上的最新版本的android:versionCode值,就可以立即測試更新功能。
為什么我下載了歷史版本,打開應(yīng)用不會提示更新?
1.有可能你的歷史版本沒有集成sdk的更新功能。
2.你沒有修改versioncode,僅僅依靠自增的buildno來控制版本,這樣你是沒有辦法立馬檢測到新版本的,因?yàn)閟dk并無法知道你下載的apk對應(yīng)的buildno,所以本地只能保存最新的buildno,當(dāng)你有新的版本再次上傳時(shí),sdk就可以根據(jù)buildno來對比檢測到新版本。
自定義更新安裝apk時(shí)提示“解析包出錯(cuò)”
public void onUpdateAvailable(final String result) { // 調(diào)用sdk的默認(rèn)下載,apk下載地址為result字符串中downloadURL對應(yīng)的值 String downloadUrl = "apk下載地址"; startDownloadTask(MainActivity.this,downloadUrl); }
請檢查apk下載地址是否正確,這里不是apk的單頁短鏈接而是result里面的downloadURL對應(yīng)的值。