Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android 如何引用@hide(隱藏)的類,方法和常量?

android 如何引用@hide(隱藏)的類,方法和常量?

編輯:關於Android編程

最近在處理SD卡的讀寫問題,本地Elipse能跑的程序提交到服務器上的時候,報錯,找不到import的類,還有一些方法也是找不到,利用sourceInsight搜了源碼發現都是用了@hide標記的類和方法。

 

/**
 * Description of a storage volume and its capabilities, including the
 * filesystem path where it may be mounted.
 *
 * @hide
 */
public class StorageVolume implements Parcelable {

首先解釋一下為什麼在android的源碼中會出現這種標記。@hide掉的一些類和方法是因為這些類,方法是正在開發中或者不穩定的,當用戶引用了這些類或者方法在下一次SDK更新之後可能就找不到了。這個時候程序的穩定性和兼容性都會存在很大的問題。

 

進入正題,當我們的程序中需要使用到這些方法才能實現我們的功能的時候,我們可以有三種方法去實現。

1、直接將@hide標記去掉,將重新編譯了的android.jar包換掉;

不過強烈的建議不要這樣做,別人隱藏起來的類或者方法肯定是不安全的,如果你把@hide放出來可能引起一些程序不可預知的錯誤。

 

 

2、利用反射機制使用@hide方法,這種方法在網上看到一篇不錯的,簡單易懂,要深入的自己再到網上搜

www.2cto.com

 

 

3、修改系統文件

3.1修改android.mk文件

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := optional

LOCAL_STATIC_JAVA_LIBRARIES := android-support-v13
LOCAL_STATIC_JAVA_LIBRARIES += android-ex-camera2-portability
LOCAL_STATIC_JAVA_LIBRARIES += xmp_toolkit
LOCAL_STATIC_JAVA_LIBRARIES += glide

LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_SRC_FILES += $(call all-java-files-under, src_pd)
LOCAL_SRC_FILES += $(call all-java-files-under, src_pd_gcam)

LOCAL_RESOURCE_DIR += 
	$(LOCAL_PATH)/res 
	$(LOCAL_PATH)/res_p


include $(LOCAL_PATH)/version.mk
LOCAL_AAPT_FLAGS := 
        --auto-add-overlay 
        --version-name $(version_name_package) 
        --version-code $(version_code_package) 

LOCAL_PACKAGE_NAME := Camera2

#LOCAL_SDK_VERSION := current
LOCAL_CERTIFICATE := platform
LOCAL_PROGUARD_FLAG_FILES := proguard.flags
LOCAL_PROGUARD_ENABLED := disabled

LOCAL_JNI_SHARED_LIBRARIES := libjni_tinyplanet libjni_jpegutil

include $(BUILD_PACKAGE)

include $(call all-makefiles-under, $(LOCAL_PATH))
將紅色的注釋掉。LOCAL_SDK_VERSION 用於指定該APK項目所需的SDK版本,current代表了當前android源碼的版本,如果注釋掉就會使應用程序可以訪問被@hide的api

 

3.2將LOCAL_SDK_VERSION 注釋掉之後提到服務器編譯出現了代碼混淆錯誤。這個時候可以在android.mk文件中將LOCAL_PROGUARD_ENABLED := disabled加上。LOCAL_PROGUARD_ENABLED := disabled不使用代碼混淆的工具進行代碼混淆,如果不設置,默認使用LOCAL_PROGUARD_ENABLED := full.即將該工程代碼全部混淆。

 

 

 

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved