轉(zhuǎn)自:
為遵義等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及遵義網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、遵義網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!
本文針對android studio工具下的ndk開發(fā)。
build目錄就是項目模塊構(gòu)建過程和結(jié)果使用到的位置。
項目根目錄下有一個build目錄。
項目根目錄下各模塊子目錄下各自有一個build目錄。
build目錄下一般由4個子目錄組成:
generated由aapt工具根據(jù)資源數(shù)據(jù)自動生成的java類
intermediates中間過程
outputs輸出結(jié)果
tmp編譯日志
根目錄下的build目錄,這個build服務(wù)于整個項目,在本文中稱其做項目build,以區(qū)分模塊build。
項目build一般只有g(shù)enerated和intermediates兩個子目錄,用于生成這個項目的buildTools。
generated目錄會生成一個mockable-android-${buildToolsVersion}.jar。
intermediates目錄根據(jù)需要生成dex-cache,這個目錄下的xml文件配置jar包在編譯過程中如何緩沖使用。
模塊build目錄在make module ${MOD_NAME}后就會生成4個子目錄。
我們來看intermediates目錄,中間生成和編譯過程使用到的目錄。
這個目錄下有這么幾個比較關(guān)心的子目錄:
binaries? ? ? ? ? ? ? ? ? NDK,生成c++連接庫
bundles? ? ? ? ? ? ? ? ? 模塊鏈接到的自定義jar包和各abi版本的c++鏈接庫都捆綁在這里
classes模塊中生成的自定義java類
exploded-aar ? ? ? ? ?由aar包解壓出來的資源,jar包和so鏈接文件等。用于本模塊的鏈接和集成。
jniLibs? ? ? ? ? ? ? ? ? ?在build.grade中你指定的jniLibs目錄整個拷貝。模塊鏈接到的庫文件會被捆到bundles目錄。
objectFiles? ? ? ? ? ? ? NDK,生成c++中間對象(.o)文件。
transforms? ? ? ? ? ? ? 根據(jù)你當(dāng)前選擇的productFlavor和其包含的abiFilter,從bundles和binaries取出鏈接庫。
接著就是output目錄:
aar如果模塊是android library
jar ? ? ? ? ? ? ? ? ? ? ? ? 如果模塊是java library
apk ? ? ? ? ? ? ? ? ? ? ? ?如果是Activity應(yīng)用程序
最后就是tmp目錄:
compile$(NDK_Module)$(ABI)$(BUILD_TYPE)$(PRODUCT_FLAVOR)MainCpp ? ? ? ? ? ? ? ndk編譯日志
link$(NDK_Module)$(ABI)$(BUILD_TYPE)$(PRODUCT_FLAVOR)$(LIB_TYPE)? ? ? ? ? ? ? ? ndk鏈接日志
編譯的子目錄由三要素組合而成,分別是
BUILD_TYPE := debug|release
ProductFlavor := 你在gradle文件中創(chuàng)建的flavor
abiFilter :=
逆向深入objc,c++ windows下仿objc動畫層UI引擎
Android操作系統(tǒng)目錄結(jié)構(gòu)詳解。Android操作系統(tǒng)沒有內(nèi)置文件管理器,經(jīng)過安裝第三方文件管理器后可以對主系統(tǒng)內(nèi)存和SD卡上的文件管理。主內(nèi)存中的文件目錄都是由主系統(tǒng)自動生成。下面是Android系統(tǒng)目錄結(jié)構(gòu)詳解,供大家交流使用。
不廢話先上圖:
目錄分為
原文:
本文僅僅記錄筆記。
忍不住整理了一份自己喜歡的閱讀風(fēng)格
層次分明的Android文件目錄,清晰的結(jié)構(gòu)幫你更好的理解Android系統(tǒng)
有補充歡迎評論
原來,只要把文件寫在這里的話,可以不用動態(tài)申請權(quán)限,只要在manifest里面聲明權(quán)限就ok了;
應(yīng)用程序在運行的過程中如果需要向手機上保存數(shù)據(jù),一般是把數(shù)據(jù)保存在SDcard中的。
大部分應(yīng)用是直接在SDCard的根目錄下創(chuàng)建一個文件夾,然后把數(shù)據(jù)保存在該文件夾中。
這樣當(dāng)該應(yīng)用被卸載后,這些數(shù)據(jù)還保留在SDCard中,留下了垃圾數(shù)據(jù)。
并且在API
6.0之后,根目錄文件存儲是需要用戶授權(quán)的,就算你在AndroidManifest.xml中配置了存儲權(quán)限,用戶不授權(quán)也是寫不進(jìn)去了。
SD卡讀寫權(quán)限:
如果你想讓你的應(yīng)用被卸載后,與該應(yīng)用相關(guān)的數(shù)據(jù)也清除掉,該怎么辦呢?
通過
可以得到
這個目錄里面,一般放一些長時間保存的數(shù)據(jù)
方法可以獲取到 SDCard/ Android /data/你的應(yīng)用的包名/files/ 目錄,一般放一些長時間保存的數(shù)據(jù)
通過
方法可以獲取到
如果使用上面的方法,當(dāng)你的應(yīng)用在被用戶卸載后,SDCard/Android/data/你的應(yīng)用的包名/ 這個目錄下的所有文件都會被刪除,不會留下垃圾信息。并且
這個方法獲得的文件存儲路徑適用于6.0以后系統(tǒng),只要AndroidManifest.xml配置讀寫權(quán)限了,就不需要用戶再授權(quán)了。
正常開發(fā)中獲取存儲路徑的方法是:
可以看到,當(dāng)SD卡存在或者SD卡不可被移除的時候,就調(diào)用getExternalCacheDir()方法來獲取緩存路徑,否則就調(diào)用getCacheDir()方法來獲取緩存路徑。前者獲取到的就是 /sdcard/Android/data/application package/cache 這個路徑,而后者獲取到的是 /data/data/application package/cache 這個路徑。
設(shè)置-應(yīng)用-應(yīng)用詳情里面的”清除數(shù)據(jù)“與”清除緩存“選項分別對應(yīng)的是data/data/application package/和data/data/application package/cache
external storage (外部存儲):
Environment.getExternalStorageDirectory()SD根目錄:/mnt/sdcard/ (6.0后寫入需要用戶授權(quán))
context.getExternalFilesDir(dir)路徑為:/mnt/sdcard/Android/data/ package name /files/…
context.getExternalCacheDir()路徑為:/mnt/sdcard//Android/data/ package name /cache/…
internal storage(內(nèi)部存儲):
context.getFilesDir()路徑是:/data/data/ package name /files/…
context.getCacheDir()路徑是:/data/data/ package name /cach/…