eclipse+androidADT編譯JAVA沒問題
但是android Studio就無法運行java項目
B. 安卓系統可以直接編譯和運行JAVA文件嗎需要怎麼安裝環境
安卓軟體的開發,許Java的環境呢
需要你會編程和Java,然後可以在應用寶上面下載一個開發的教程
應用寶裡面的資源很多,除了有大量的APP應用可以免費下載
還有很多軟體開發的教程和攻略呢,都是很不錯的,免費下載呢
在手機上打開應用寶軟體搜索你所需要的教程,找到下載就可以了。
也可以通過手機連接電腦端的應用寶軟體來下載的,打開PC端的應用寶軟體——手機應用。
可以通過搜索你所需要的開發教程進行下載呢,都是很方便的。還望採納
C. android中java靜態庫和java共享庫有什麼區別
程序編制一般需經編輯、編譯、鏈接、載入和運行幾個步驟。在我們的應用中,有一些公共代碼是需要反復使用,就把這些代碼編譯為「庫」文件;在鏈接步驟中,連接器將從庫文件取得所需的代碼,復制到生成的可執行文件中。這種庫稱為靜態庫,其特點是可執行文件中包含了庫代碼的一份完整拷貝;缺點就是被多次使用就會有多份冗餘拷貝。
為了克服這個缺點可以採用動態鏈接庫。這個時候鏈接器僅僅是在可執行文件中打上標志,說明需要使用哪些動態連接庫;當運行程序時,載入器根據這些標志把所需的動態鏈接庫載入到內存。
另外在當前的編程環境中,一般都提供方法讓程序在運行的時候把某個特定的動態連接庫載入並運行,也可以將其卸載(例如Win32的LoadLibrary()&FreeLibrary()和Posix的dlopen()&dlclose())。這個功能被廣泛地用於在程序運行時刻更新某些功能模塊或者是程序外觀。
與普通程序不同的是,Java程序(class文件)並不是本地的可執行程序。當運行Java程序時,首先運行JVM(Java虛擬機),然後再把Java class載入到JVM里頭運行,負責載入Java class的這部分就叫做Class Loader。通常class文件僅在需要使用時才載入。 這本身就是一種動態鏈接。
Java作為一種天生的動態鏈接語言,無法支持靜態鏈接。但C語言的靜態庫除了靜態鏈接的概念外,還隱含了一層意思,即庫中的代碼會打包到可執行文件中。JAVA中的JAR某種程度上類似一個可執行文件或庫,借用C語言中靜態庫和動態庫的概念,這里把最終會合並到生成的JAR文件中的JAR包叫靜態庫,反之僅僅在編譯中使用,並不打包到生成的JAR包中,運行時需系統自行提供的JAR包叫動態庫。
C的靜態鏈接只把需要的代碼復制過來,而Java用類似Fat Jar的方法,把所有的依賴庫打包到最後的庫中,眉毛鬍子一把抓。這個問題可以用ProGuard解決,用它自己的話說是 It detects and removes unused classes, fields, methods, and attributes。
Eclipse中對JAR包的使用方式有兩種,library和user libraries,其中library在工程中通過add jars...或add external jars...添加,出現在Referenced Libraries中,而user libraries需要在工作空間中管理,再在工程中通過add library...添加。這兩種使用方式本身並沒有靜態庫和動態庫的區別,需要在打包或部署時再行指定。但user libraries的方式明顯更方便管理多個工程共同使用的多個庫,而系統庫往往都有這種特性。
android的apk比JAR更類似可執行程序,而且因為標准庫隱藏了很多功能,我們常常需要使用自己構建的系統庫來編譯。但android的ADT工具並沒有提供是否將library或user libraries打包的選項。根據我的經驗,ADT默認將library打包到apk中,而user libraries則僅用於編譯,運行時再請求系統載入相關類。哪位同學有更明確的信息,還望指教,我短期內恐怕不會有時間去研究這個問題。
因此,可以這么說,在android中,library用來添加靜態庫,而user libraries用來管理動態庫。千萬不能弄錯了,如果把靜態庫錯誤地加入動態庫,運行時會出現找不到對應的class的錯誤,但因為Java語言的動態鏈接機制,只有運行到庫中代碼時才會出錯;反之,如果把動態庫做成了靜態庫,問題就更隱蔽了,可能只是dex文件特別大,而沒有其它問題,也可能因載入了錯誤版本的系統代碼,出現一些稀奇古怪的問題。慎之,慎之...
附:向eclispe中添加user Libraries的步驟:
1。點擊eclipse的window菜單,選擇「Preference」
2。在preferences窗口中選擇java->User Libraries,然後點擊窗口右邊的New...按鈕,在彈出的子窗口中輸入user library的名稱,此時在user libraries窗口中會出現新加的library名稱。
3。向該user library中添加jar包。選中my_lib,然後點擊Add JARS...按鈕,選擇你要添加的jar後,點擊「打開」按鈕,則my_lib庫中就會出現你剛添加的jar文件信息。
4。最後點擊窗口下的「OK」按鈕,完成user library的添加和其jar的添加。
D. 有沒有哪個安卓軟體可以編譯並運行java代碼
手機上做這種事有極大的限制。這幾乎是不可能的。
不如直接看電子書或別人的代碼來的快。
E. android打包時怎麼修改添加自定義java類和so庫,以及Androi
問題描述:Android如何調用第三方SO庫; 已知條件:SO庫為Android版本連接庫(*.so文件),並提供了詳細的介面說明; 已了解解決方案: 1.將SO文件直接放到libs/armeabi下,然後代碼中System.loadLibrary("xxx");再public native static int xxx_xxx_xxx();接下來就可以直接調用xxx_xxx_xxx()方法; 2.第二種方案,創建自己的SO文件,在自己的SO文件里調用第三方SO,再在程序中調用自己的SO,這種比較復雜,需要建java類文件,生成.h文件,編寫C源文件include之前生成的.h文件並實現相應方法,最後用android NDK開發包中的ndk-build腳本生成對應的.so共享庫; 求解: 1.上面兩種方案是否可行?不可行的話存在什麼問題? 2.兩種方案有什麼區別?為什麼網上大部都是用的第二種方案? 3.只有一個*.so文件,並提供了詳細的介面說明,是否可在ANDROID中使用它? 首先要看這個SO是不是JNI規范的SO,比如有沒有返回JNI不直接支持的類型。也就是說這個SO是不是可以直接當作JNI來調用。如果答案是否定的,你只能選第二個方案。 如果答案是肯定的,還要看你是不是希望這個SO的庫直接暴露給JAVA層,如果答案是否定的,你只能選第二個方案,比如你本身也是一個庫的提供者。 一般如果你只有SO,就說明這個是別人提供給你的,你可以要求對方給你提供配套的JAVA調用文件。 1、這個要看這個SO是不是符合JNI調用的規范。還要看你自己的意願。 2、因為第二種方法最靈活,各種情況都可以實現。 3、可以 看能不能直接從JAVA調用的最簡單的方法就是看SO里的函數名是不是Java_XXX_XXX_XXX格式的 是就可以,你可以自己寫一個配套的JAVA文件,注意一下SO函數名和JAVA函數名的轉換規則,或者向SO提供方索要; 不是的話就選第二種方案吧。 1、檢查所需文件是否齊全 使用第三方動態庫,應該至少有2個文件,一個是動態庫(.so),另一個是包含 動態庫API聲明的頭文件(.h) 2、封裝原動態庫 原動態庫文件不包含jni介面需要的信息,所以我們需要對其進行封裝,所以我 們的需求是:將libadd.so 裡面的API封裝成帶jni介面的動態 3、編寫庫的封裝函數libaddjni.c 根據前面生成的com_android_libjni_LibJavaHeader.h 文件,編寫libaddjni.c,用 來生成libaddjni.so Android中集成第三方軟體包(.jar, .so) Android中可能會用到第三方的軟體包,這包括Java包.jar和Native包.so。jar包既可通過Eclipse開發環境集成,也可通過編譯源碼集成,看你的工作環境。 假定自己開發的程序為MyMaps,需要用到BaiMaps的庫,包括mapapi.jar和libBMapApiEngine_v1_3_1.so。 一、Eclipse中集成第三方jar包及.so動態庫 MyMaps工程下創建目錄libs以及libs/armeabi,把mapapi.jar放在的libs/目錄下,把libBMapApiEngine_v1_3_1.so放在libs/armeabi/下。 Eclipse中把第三方jar包mapapi.jar打包到MyMaps的步驟: 1. 右擊工程,選擇Properties; 2. Java Build Path,選擇Libraries; 3. Libraries頁面點擊右面按鈕「Add Library…」; 4. 選擇「User Library」,點擊「Next」; 5. 點擊「User Libraries」按鈕; 6. 在彈出界面中,點擊「New…」; 7. 輸入「User library name」,點擊「OK」確認; 8. 返回之後,選擇剛剛創建的User library,右面點擊「AddJARs」; 9. 選擇MyMaps/libs/下的mapapi.jar; 10. 確認,返回。 這樣,編譯之後,該jar包就會被打進MyMaps.apk中,libBMapApiEngine_v1_3_1.so也被打包在lib/armeabi/中。 程序運行過程中,libBMapApiEngine_v1_3_1.so被放在/data/data/<yourAppPackage>/lib/下,載入動態庫時系統會從程序的該lib/目錄下查找.so庫。 二、源碼中集成第三方集成jar包及.so動態庫 Android源碼中MyMaps放在packages/apps下。MyMaps下創建目錄libs以及libs/armeabi,並把mapapi.jar放在libs/,把libBMapApiEngine_v1_3_1.so放在libs/armeabi。 2.1 修改Android.mk文件 Android.mk文件如下: [plain] view plain LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE_TAGS := optional LOCAL_STATIC_JAVA_LIBRARIES := libmapapi LOCAL_SRC_FILES := $(call all-subdir-java-files) LOCAL_PACKAGE_NAME := MyMaps include $(BUILD_PACKAGE) ################################################## include $(CLEAR_VARS) LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES :=libmapapi:libs/mapapi.jar LOCAL_PREBUILT_LIBS :=libBMapApiEngine_v1_3_1:libs/armeabi/libBMapApiEngine_v1_3_1.so LOCAL_MODULE_TAGS := optional include $(BUILD_MULTI_PREBUILT) # Use the following include to make our testapk. include $(callall-makefiles-under,$(LOCAL_PATH)) 1 集成jar包 LOCAL_STATIC_JAVA_LIBRARIES取jar庫的別名,可以任意取值; LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES指定prebuiltjar庫的規則,格式:別名:jar文件路徑。注意:別名一定要與LOCAL_STATIC_JAVA_LIBRARIES里所取的別名一致,且不含.jar;jar文件路徑一定要是真實的存放第三方jar包的路徑。 編譯用BUILD_MULTI_PREBUILT。 2 集成.so動態庫 LOCAL_PREBUILT_LIBS指定prebuilt so的規則,格式:別名:so文件路徑。注意:別名一般不可改變,特別是第三方jar包使用.so庫的情況,且不含.so;so文件路徑一定要是真實的存放第三方so文件的路徑。 編譯拷貝用BUILD_MULTI_PREBUILT。 2.2 加入到GRANDFATHERED_USER_MODULES 在文件user_tags.mk中,把libBMapApiEngine_v1_3_1加入到GRANDFATHERED_USER_MODULES中 [plain] view plain GRANDFATHERED_USER_MODULES += \ … \ libBMapApiEngine_v1_3_1 user_tags.mk可以是build/core下的,也可以是$(TARGET_DEVICE_DIR)下的,推薦修改$(TARGET_DEVICE_DIR)下的。 2.3 編譯結果 MyMaps.apk編譯生成在out/target/proct/<YourProct>/system/app/下; libBMapApiEngine_v1_3_1.so放在out/target/proct/<YourProct>/system/lib/下,這也是系統載入動態庫時搜索的路徑。
F. 安卓上可以用終端模擬器編譯.java文件嗎
使用cd命令定位到「文稿」裡面 然後使用javac命令編譯 然後再使用java命令運行
G. 在Android開發中如何添加Java庫呢
android工程中有一個lib文件夾就是存放第三方的lib庫的,你需要在工程的buildpath中載入lib到工程的編譯路徑中。
或者你自己找到項目文件,直接在lib下復制進去java庫,再在項目上重新刷新下,就有了。不行可以重新buildpath下。
H. Android怎麼將開源庫編譯成jar包
1. 開源庫的jar可以直接拿來在Android裡面編譯使用,可能涉及一些依賴的庫。
2. 如果需要編譯Jar包,有兩種選擇:
第一種: 基於Java方式的Jar包,工程導入後,通過export方式導出的jar。
第二種: 基於Android方式的Jar包,工程通過Android lib project的方式導入的。具體步驟:
new->project...->Android Project from Existing Code->填入路徑->Finish->右擊工程->Export...->Java->JAR file
理論上如果開源庫不是基於Android開發的話,第二種方式導出Jar,估計需要比較久的解決依賴的過程。
I. 安卓手機有JAVA編譯器嗎推薦個
apt android開發環境