Showing posts with label proguard. Show all posts
Showing posts with label proguard. Show all posts

Wednesday, December 31, 2014

好用的第3方套件與相對proguard腳本

文章攢寫時間︰2014/12/31 16:40

Dropbox

官方的套件。
透過該套件可以輕鬆的與Dropbox將資料上傳或下載。

需要套件
●dropbox-android-sdk-1.6.jar
●json_simple-1.1.jar

Listviewanimations 

ListviewAnimations這個套件優化了ListView,
讓其list item可以上下拖曳,
甚至結合了眾多第3方套件,
讓UX使用體驗更順暢。

需要套件(在app/libs/底下直接貼上jar檔並對該jar檔按右鍵選擇add as Library)
●listviewanimations_lib-core-slh_3.1.0.jar
●listviewanimations_lib-core_3.1.0.jar
●listviewanimations_lib-manipulation_3.1.0.jar
●nineoldandroids_library.jar

build.gradle檔需加上
dependencies {
    compile 'se.emilsjolander:stickylistheaders:2.5.2'
}
proguard腳本需加上
-keep class com.nhaarman.listviewanimations.** {*; }

Volley

Volley是Google提供的套件
目的讓Android App更方便、快速的使用HTTP連線。

此外,
Volley還提供cache機制,
倘若重覆請求連線,
亦提供一個更快速顯示資料的可行方案,
如果頁面失去焦點,
Volley也能確保資料不會回去頁面造成相關的crash。

需要套件
●volley-sources.jar

UIL (Universal Image Loader)

UIL替Android開發者省下大量處理圖片記憶體洩漏可能發生的機會,
並提供各種cache和存放方式,
讓圖片大量下載更加輕鬆。

需要套件
●universal-image-loader-1.9.3.jar

或在Android Studio專案app/build.gradle檔裡加上
dependencies {
    compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.3'
}
直接從線上Download該套件並使用。

Glide


需要套件
●glide-3.4.0.jar
●glide-3.4.0-javadoc.jar
●glide-okhttp-integration-1.1.0.jar
●glide-volley-integration-1.1.0.jar
proguard腳本加上
-keep class com.bumptech.glide.integration.okhttp.** {*; }
-dontwarn com.bumptech.glide.integration.okhttp.**

Friday, April 25, 2014

使用Webview時,遇到Uncaught ReferenceError: is not defined.

文章攢寫時間︰2014/04/25 16:50
Admob使用版本︰Goole Play Service 4.0版

一、問題

今天在Debug模式下,
可以正常和網頁透過Javscript interface溝通,
但是一旦使用正式金鑰釋岀apk時,
卻遇到

"Uncaught TypeError: Object [object Object] has not method 'xxxxx'", source: http://xxxxxx

的問題。

二、解決辦法

這個問題也是因為proguard沒有宣告規則導致的問題。
需要在proguard.cfg檔裡宣告如下
# 添加以下的程式碼才能讓webview的javascript能正常運作
-keep public class com.yourpackage.WebViewActivity$yourwebview_interface
-keep public class * implements com.yourpackage.WebViewActivity$yourwebview_interface
-keepclassmembers class com.yourpackage.WebViewActivity$yourwebview_interface { 
    ; 
}
-keepattributes JavascriptInterface

舉個例來看, 下面是我在Java裡使用Webview的簡單例子
 private void setWebview(){
webView.getSettings().setJavaScriptEnabled(true);
  webView.addJavascriptInterface(new WebViewHandler(), "handler");
  webView.setWebViewClient(new WebViewClient() {
  
  @Override
  public void onPageFinished(WebView view, String url) {
   LogPrint.i(TAG, "onPageFinished ,url: "+url);

   //呼叫網頁當下頁面的js函式:getVXML(),然後網頁js會呼叫回來下方的函式︰receiveValueFromJs()
   webView.loadUrl("javascript:getVXML()");

   super.onPageFinished(view, url);
  }
  
          @Override
          public boolean shouldOverrideUrlLoading(WebView view, String url) {
            return super.shouldOverrideUrlLoading(view, url);
          }
  
     });      
     webView.loadUrl(webViewUrl);
        }

     class WebViewHandler {
  //網頁當下頁面的js函式:getVXML()會呼叫這隻Native函式︰receiveValueFromJs(String data)
  public void receiveValueFromJs(String data) {

  }
 }

那麼,
在proguard.cfg檔裡,
則要宣告混淆規則如下︰
# 添加以下的程式碼才能讓webview的javascript能正常運作
-keep public class com.yourpackage.WebViewActivity$WebViewHandler
-keep public class * implements com.yourpackage.WebViewActivity$WebViewHandler
-keepclassmembers class com.yourpackage.WebViewActivity$WebViewHandler { 
    ; 
}
-keepattributes JavascriptInterface

填寫完混淆規則後,
輸岀正式金鑰的apk檔,
這時候Webview javascript interface就能繼續正常使用了。

Monday, December 30, 2013

Tapjoy與Proguard的親密接觸

文章攢寫時間︰2013/12/31 11:40

一、前言
話說等一下即將邁入2014年,
各位安卓猿們有沒有安排跨年計劃,
亦或待在家專心趕code呢?
先祝大家新的一年健康快樂、事業順利啊!

言歸正傳,
這幾天在寫code時,
遇到了Tapjoy在Proguard編譯岀來的apk檔裡發生的問題。

二、問題

為了不要讓Java檔一下子就被破解,
Android提供了Proguard工具。

這幾天在使用tapjoy機制時,
運行時遇到了因為程式Proguard後,
導致找不到tapjoy library resources的NullPointerException問題。

三、解決辦法

只要在proguard腳本檔(proguard-project.txt)裡添加兩行即可解決
-keep class com.tapjoy.** { *; }
-keepattributes JavascriptInterface

相關文章︰