當前位置:首頁 » 安卓系統 » androidandroidmk

androidandroidmk

發布時間: 2023-06-11 14:15:25

『壹』 android mk文件怎麼打開

.mk後綴名文件類型:Makefile擴展名為.mk的文件是一個開發文件。Makefile規則如下所示目標:依賴文件列表命令列表1、目標通常是要產生的文件名稱,目標可以是可執行文件或obj文件,也可是一個動作的名稱.2、依賴文件是用來輸入從而產生目標的文件

『貳』 android.mk ubuntu怎麼編譯

一個Android.mk file用來向編譯系統描述你的源代碼。具體來說:該文件是GNU Makefile的一小部分,會被編譯系統解析一次或多次。你可以在每一個Android.mk file中定義一個或多個模塊。每個模塊屬下列類型之一:
1)APK程序,一般的Android程序,編譯打包生成apk文件
2)java庫,java類庫,編譯打包生成jar文件
3) CC++應用程序,可執行的CC++應用程序
4)CC++靜態庫,編譯生成CC++靜態庫,並打包成.a文件
5)CC++共享庫,編譯生成共享庫(動態鏈接庫),並打包成.so, 有且只有共享庫才能被安裝/復制到您的應用軟體(APK)包中。
(1)先看一個簡單的例子:一個簡單的"hello world",比如下面的文件:
sources/helloworld/helloworld.c
sources/helloworld/Android.mk
相應的Android.mk文件會像下面這樣:

---------- cut here ------------------

普通的.mk一樣

=====================================m、mm、mmm編譯命令===========================================

android源碼目錄下的build/envsetup.sh文件,描述編譯的命令
- m: Makes from the top of the tree.
- mm: Builds all of the moles in the current directory.
- mmm: Builds all of the moles in the supplied directories.

所以要想使用這些命令,首先需要在android源碼根目錄執行build/envsetup.sh 腳本設置環境。
m:編譯所有的模塊
mm:編譯當前目錄下的模塊,當前目錄下要有Android.mk文件
mmm:編譯指定路徑下的模塊,指定路徑下要有Android.mk文件

下面舉個例子說明,假設我要編譯android下的hardwarelibhardware_legacypower模塊,當前目錄為源碼根目錄,方法如下:
1、. build/envsetup.sh
2、mmm hardware/libhardware_legacy/power/
或者 :
1、. build/envsetup.sh
2、cd hardware/libhardware_legacy/power/
3、mm

m沒有試過。默認上述兩個編譯命令,只編譯發生變化的文件。如果要編譯模塊的所有文件,需要-b選項,例如mm -b或者mmm -b

make命令,也可以用來編譯。如果是include $(BUILD_PACKAGE),用makeLOCAL_PACKAGE_NAME值;如果是include $(BUILD_EXECUTABLE)或者include $(BUILD_JAVA_LIBRARY),用makeLOCAL_MODULE值(未驗證)。

『叄』 android mk文件怎麼加混淆

針對android 選擇user版本進行編譯的時候,會出現proguard錯誤,我們需要知道的事情

1.proguard是做什麼的,他的作用是將java代碼進行混淆的工具

2.因為proguard是混淆工具,所以android的mk文件也對其支持為兩種方式:

1.指定不需要混淆的native方法與變數的proguard.flags文件
如:LOCAL_PROGUARD_FLAG_FILES := proguard.flags

2.制定編譯的工程,不要使用代碼混淆的工具進行代碼混淆
如:LOCAL_PROGUARD_ENABLED := disabled
3.不設置,默認使用LOCAL_PROGUARD_ENABLED := full.即將該工程代碼全部混淆

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
在Android項目中用到JNI,當用了proguard後,發現native方法找不到很多變數,原來是被proard優化掉了。所以,在JNI應用中該慎用progurad啊。

解決辦法:
1、在Android.mk中加入一行:
LOCAL_PROGUARD_FLAGS := -include $(LOCAL_PATH)/proguard.flags
2、創建proguard.flag文件,裡面寫入不需要proguard優化的類和方法。例如:

-keep class oms.miracle.mobiletv.broadcast.ServiceContext {
*;
}

我的這個類是和JNI相關的,不想讓proguard去優化而引起錯誤,向上面寫就能實現。

----------下面是網上找到的一些proguard的資料,貼出來分享:
ProGuard是一個免費的java類文件壓縮,優化,混淆器.它探測並刪除沒有使用的類,欄位,方法和屬性.它刪除沒有用的說明並使用位元組碼得到最大優化.它使用無意義的名字來重命名類,欄位和方法.

ProGuard的使用是為了:

1.創建緊湊的代碼文檔是為了更快的網路傳輸,快速裝載和更小的內存佔用.
2.創建的程序和程序庫很難使用反向工程.
3.所以它能刪除來自源文件中的沒有調用的代碼
4.充分利用java6的快速載入的優點來提前檢測和返回java6中存在的類文件.

參數:

-include {filename} 從給定的文件中讀取配置參數

-basedirectory {directoryname} 指定基礎目錄為以後相對的檔案名稱

-injars {class_path} 指定要處理的應用程序jar,war,ear和目錄

-outjars {class_path} 指定處理完後要輸出的jar,war,ear和目錄的名稱

-libraryjars {classpath} 指定要處理的應用程序jar,war,ear和目錄所需要的程序庫文件

- 指定不去忽略非公共的庫類。

- 指定不去忽略包可見的庫類的成員。

保留選項
-keep {Modifier} {class_specification} 保護指定的類文件和類的成員

-keepclassmembers {modifier} {class_specification} 保護指定類的成員,如果此類受到保護他們會保護的更好

-keepclasseswithmembers {class_specification} 保護指定的類和類的成員,但條件是所有指定的類和類成員是要存在。

-keepnames {class_specification} 保護指定的類和類的成員的名稱(如果他們不會壓縮步驟中刪除)

-keepclassmembernames {class_specification} 保護指定的類的成員的名稱(如果他們不會壓縮步驟中刪除)

-keepclasseswithmembernames {class_specification} 保護指定的類和類的成員的名稱,如果所有指定的類成員出席(在壓縮步驟之後)

-printseeds {filename} 列出類和類的成員-keep選項的清單,標准輸出到給定的文件

『肆』 android.mk是在什麼情況下生成的

當你需要使用JNI的時候,你需要創建一個native工程。Android.mk就是一個makefile配置文件,幫你把C/C++的代碼編譯成動態庫so的。

創建的方式有兩種:

在工程根目錄裏手動創建一個目錄叫jni,在裡面新建一個Android.mk,然後創建c,cpp文件,把他們配置到Android.mk里。

右鍵工程,選擇Android Tools->Add Native Support自動生成。



(4)androidandroidmk擴展閱讀:

創建Android庫

Android 庫在結構上與 Android 應用模塊相同。可以提供構建應用所需的一切內容,包括源代碼、資源文件和 Android 清單。

不過,Android 庫將編譯到可以用作 Android 應用模塊依賴項的 Android 歸檔 (AAR:Android Archive Resource) 文件,而不是在設備上運行的 APK。

與 JAR 文件不同,AAR 文件可以包含 Android 資源和一個清單文件,這樣,除了 Java 類與方法外,還可以捆綁布局和可繪制對象等共享資源。

庫模塊在以下情況下非常有用:

構建使用某些相同組件(例如 Activity、服務或 UI 布局)的多個應用。

構建存在多個 APK 變體(例如免費版本和付費版本)的應用並且需要在兩種版本中使用相同的核心組件。

『伍』 android.mk 這個文件在哪裡 我怎麼找不到

android.mk 是Android開發中,用來編譯JNI代碼的

在開發工具中,new JNI 即可創建一個 android.mk文件

一個Android.mk文件可以編譯多個模塊,每個模塊屬下列類型之一:

  1. APK程序 一般的Android程序,編譯打包生成apk文件

  2. JAVA庫 java類庫,編譯打包生成jar文件

  3. CC++應用程序 可執行的CC++應用程序

  4. CC++靜態庫 編譯生成CC++靜態庫,並打包成.a文件

  5. CC++共享庫 編譯生成共享庫(動態鏈接庫),並打包成.so文, 有且只有共享庫才能被安裝/復制到您的應用軟體(APK)包中。

『陸』 android studio怎麼創建ndkclass.c和android.mk文件

Android.mk文件首先需要指定LOCAL_PATH變數,用於查找源文件,宏函數』my-dir』, 由編譯系統提供。由於一般情況下Android.mk和需要編譯的源文件在同一目錄下,所以定義成如下形式:
LOCAL_PATH:=$(call my-dir)
上面的語句的意思是 將LOCAL_PATH變數定義成 本文件所在 目錄路徑。
一個 Android.mk中 可以 定義 多個編譯模塊,每個編譯模塊 都是 以include $(CLEAR_VARS)開始
以include $(BUILD_XXX)結束

相關鏈接:http://blog.csdn.net/wh_19910525/article/details/7518190

『柒』 Android.mk介紹(一)

在Linux下,可以通過Makefile來對源碼工程進行管理,Android.mk文件是Makefile的一小部分,它用來對Android程序進行編譯。Android.mk文件中描述了哪些C文件將被編譯且指明了如何編譯。Android.mk文件用來告知NDK Build 系統關於Source的信息。

1、編譯可執行程序

2、編譯動態庫或靜態庫

3、預編譯文件(APK或Java庫)

以上三種是Android.mk的主要用法,我們寫mk文件時也就是以上三種目的。


首先看一個最簡單的Android.mk的例子:

講解:

每個Android.mk文件必須以定義 LOCAL_PATH 為開始。它用於在開發tree中查找源文件。

my-dir 由Build System提供。返回包含Android.mk的目錄路徑。

CLEAR_VARS 變數由Build System提供。並指向一個指定的GNU Makefile,由它負責清理很多LOCAL_xxx.

例如:LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES等等。但不清理 LOCAL_PATH .

這個清理動作是必須的,因為所有的編譯控制文件由同一個GNU Make解析和執行,其變數是全局的。所以清理後才能避免相互影響。

LOCAL_MODULE 模塊必須定義,以表示Android.mk中的每一個模塊。名字必須唯一且不包含空格。

Build System會自動添加適當的前綴和後綴。例如,foo,要產生動態庫,則生成libfoo.so.

但請注意:如果模塊名被定為:libfoo.則生成libfoo.so. 不再加前綴。

LOCAL_SRC_FILES變數必須包含將要打包如模塊的C/C++ 源碼。

不必列出頭文件,build System 會自動幫我們找出依賴文件。

預設的C++源碼的擴展名為.cpp. 也可以修改,通過LOCAL_CPP_EXTENSION。

BUILD_SHARED_LIBRARY:是Build System提供的一個變數,指向一個GNU Makefile Script。

它負責收集自從上次調用include $(CLEAR_VARS) 後的所有LOCAL_XXX信息。並決定編譯為什麼。

BUILD_STATIC_LIBRARY:編譯為靜態庫。
BUILD_SHARED_LIBRARY :編譯為動態庫
BUILD_EXECUTABLE:編譯為Native C可執行程序

BUILD_PACKAGE(既可以編apk,也可以編資源包文件,但是需要指定LOCAL_EXPORT_PACKAGE_RESOURCES:=true)

BUILD_JAVA_LIBRARY(Java共享庫)

BUILD_STATIC_JAVA_LIBRARY(java靜態庫)


Android源碼中有大量的mk文件,Android系統的編譯就是靠著這些mk文件的,所以學好是非常有必要的哦!

『捌』 怎樣在Android.mk上加宏定義

在Boardconfig.mk
中添加一個
IS_FLAG := true
由於Boardconfig.mk和各目錄的Android.mk是相互關聯的
所以我們可以在Android.mk 中添加
一個
ifdef IS_FLAG
LOCAL_CFLAGS += -DHHHH
endif
在Android.mk中添加的這行相當於在 該目錄下的文件中定義了一個宏
#define HHHH

熱點內容
linux編譯opencv 發布:2025-02-08 08:14:29 瀏覽:710
解除先制的密碼是多少 發布:2025-02-08 08:10:13 瀏覽:861
c語言程序設計豆瓣 發布:2025-02-08 08:08:06 瀏覽:526
學校伺服器如何進入密碼界面 發布:2025-02-08 08:05:45 瀏覽:821
UE4源碼編譯要多久 發布:2025-02-08 07:52:50 瀏覽:233
java架構師做什麼 發布:2025-02-08 07:38:32 瀏覽:774
java解碼器 發布:2025-02-08 07:25:35 瀏覽:297
p4忘記密碼了如何刷機 發布:2025-02-08 07:25:25 瀏覽:307
java分隔 發布:2025-02-08 07:15:02 瀏覽:813
源碼乘法豎式 發布:2025-02-08 07:05:48 瀏覽:137