❶ 如何製作Jar包並在android中調用jar包
千鋒扣丁學堂Android開發學習為您解答:
jar包有兩種,一種是純粹的庫功能,沒有main入口函數,故無法直接執行;一種是包含main的可執行包!
如有hello/hello.java文件:
$ cd hello/$ javac hello.java$ java Hello (Hello為類名,如果Hello類具有main函數的話,可以這么執行)
第一種jar包命令:
jar cvf hello.jar hello
或者
$ jar cvf hello.jar hello/*.class
通過如下命令查看兩個jar的內容:
$ jar tf hello.jarMETA-INF/META-INF/MANIFEST.MFhello/hello/hello.class
顯示結果是一樣的。
對於第二種可執行jar包,方法其實可以跟第一種一樣,然後再修改MANIFEST.MF文件。
在MANIFEST.MF文件中只需要添加一行:
Main-Class: 可執行主類全名(即包含main函數的類名稱)
即可。
但也可以預先創建MANIFEST.MF文件,內容跟上面一樣,讓該文件與hello目錄保持在同一級,然後:
$ jar cvfm hello.jar MANIFEST.MF hello
然後就可以通過:
$ java -jar hello.jar
運行了。
===================
在實際項目中,可能需要很多個類文件,建議每個類文件均放到一個獨立的文件之中,文件名與該類名應一致,類的聲明為「public class xxx」(當然也可以將很多個類放到同一個文件中,但只有一個類能聲明成public(即與文件名一致的那個類),這將導致其它未聲明為public的類 無法為其它程序調用)。
比如有兩個位於同一目錄的類文件(它們之間有調用關系),將會被打包成sp_sdk.jar作為庫文件使用,文件目錄關系如下:
$ ls -l sp/android/printer-rw-r--r-- 1 zwang zwang 944 2011-06-25 17:52 FontProperty.class-rw-r--r-- 1 zwang zwang 1319 2011-06-25 17:51 FontProperty.java-rw-r--r-- 1 zwang zwang 5498 2011-06-25 17:53 PrintGraphics.class-rw-r--r-- 1 zwang zwang 5751 2011-06-25 17:51 PrintGraphics.java
各個java文件的開頭需要聲明如下(否則其它文件無法import這兩個類):
package sp.android.printer;
然後編譯命令是:
$ javac sp/android/printer/FontProperty.java $ javac sp/android/printer/PrintGraphics.java
注意編譯的位置,因為各自已經聲明了「package sp.android.printer;」,所以直接進入到sp/android/printer/目錄下是編譯不過的。
然後生成jar文件:
$ tar cvf sp_sdk.jar sp
然後就可以創建測試程序調用該庫了(測試程序裡面就可以「import sp.android.printer.*」了)。
假如測試程序test.java與sp_sdk.jar同一目錄,編譯及運行命令:
$ javac test.java$ java Test
如果不在同一目錄,編譯及運行命令:
$ javac -classpath .:/path/to/sp_sdk.jar test.java$ java -cp .:/path/to/sp_sdk.jar Test
❷ 安卓手機怎麼運行jar文件
一、
安裝java程序方法:
1、在網站上搜索一個apk格式的java虛擬機,下載安裝程序後安裝在手機上,
安裝後手機上「所有程序」中增加此程序的圖標,如下圖(安裝方法與安裝
其他程序一樣,通過手機瀏覽器下載安裝或通過電腦下載安裝包)
2、先下載好自己需要的java安裝包放在儲存卡上,進入手機已安裝好的「java「,
再點擊菜單鍵(手機下方三條橫線的圖標),點擊儲存卡選項
3、手機上會自動識別到儲存卡上的java軟體,點擊需要安裝的一個軟體,我們以安裝qq軟體為列(注意:並不是保存的所有的java軟體都會被識別),選擇後點擊確定
4、手機會提示選擇文件夾,在點擊空白處會自動跳轉到下一個安裝界面
5、界面直接切換到下一步操作界面時,會提示:應用程序手機qq不受信任,
確定繼續嗎?請點擊「確定」
6、點擊「確定「後,手機將開始安裝java軟體
7、安裝完成後,手機會直接提示:想要啟動應用程序嗎?如需要啟動就點擊「確定「,如不需要就點擊」取消「,qq軟體就已安裝完畢,如果需要使用qq軟體,就進入手機上安裝的「java」程序,安裝的java軟體都會在此程序打開後的頁面顯示,點擊「手機qq」即可運行
❸ 求解答,Android源碼編譯時怎的添加第三方jar包
Android.mk添加第三方jar包
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_STATIC_JAVA_LIBRARIES := xsocket jackson-mapper logging jackson-core javatar log4j
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_PACKAGE_NAME := test
LOCAL_CERTIFICATE := platform
include $(BUILD_PACKAGE)
##################################################
include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := xsocket:lib/xSocket-2.8.14.jar \
jackson-mapper:lib/jackson-mapper-asl-1.6.2.jar \
logging:lib/commons-logging.jar \
jackson-core:lib/jackson-core-asl-1.6.2.jar \
javatar:lib/javatar-2.5.jar \
log4j:lib/log4j-1.2.15.jar
include $(BUILD_MULTI_PREBUILT)
# Use the folloing include to make our test apk.
include $(call all-makefiles-under,$(LOCAL_PATH))
以上是我的一個項目中所需要的第三方jar包,主要參考了Android源碼中的Calculator應用,該應用也引用了一個第三方的jar包arity-2.1.2.jar。
需要注意的是,當你要引用的jar包不止一個時,有兩個關鍵的地方需要注意的。
LOCAL_STATIC_JAVA_LIBRARIES := xsocket jackson-mapper logging jackson-core javatar log4j
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := xsocket:lib/xSocket-2.8.14.jar \
jackson-mapper:lib/jackson-mapper-asl-1.6.2.jar \
logging:lib/commons-logging.jar \
jackson-core:lib/jackson-core-asl-1.6.2.jar \
javatar:lib/javatar-2.5.jar \
log4j:lib/log4j-1.2.15.jar
xsocket jackson-mapper logging jackson-core javatar log4j這幾個只是名字,可以隨便取。LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES後面才是真正其作用的地方。如:
xsocket:lib/xSocket-2.8.14.jar 引用的是lib目錄中的xSocket-2.8.14.jar。
還要注意的是 := 不要寫成了+=了哦。
附:編寫各種類型的Android.mk,出處我忘記了,是以前瀏覽是拷貝下來的。
一、編譯一個簡單的APK
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Build all java files in the java subdirectory
LOCAL_SRC_FILES := $(call all-subdir-java-files)
# Name of the APK to build
LOCAL_PACKAGE_NAME := LocalPackage
# Tell it to build an APK
include $(BUILD_PACKAGE)
二、編譯一個依賴靜態.jar文件的APK
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# List of static libraries to include in the package
LOCAL_STATIC_JAVA_LIBRARIES := static-library
# Build all java files in the java subdirectory
LOCAL_SRC_FILES := $(call all-subdir-java-files)
# Name of the APK to build
LOCAL_PACKAGE_NAME := LocalPackage
# Tell it to build an APK
include $(BUILD_PACKAGE)
註:LOCAL_STATIC_JAVA_LIBRARIES 後面應是你的APK程序所需要的JAVA庫的JAR文件名。
三、編譯一個需要platform key簽名的APK
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Build all java files in the java subdirectory
LOCAL_SRC_FILES := $(call all-subdir-java-files)
# Name of the APK to build
LOCAL_PACKAGE_NAME := LocalPackage
LOCAL_CERTIFICATE := platform
# Tell it to build an APK
include $(BUILD_PACKAGE)
註:LOCAL_CERTIFICATE 後面應該是簽名文件的文件名
四、編譯一個需要特殊vendor key簽名的APK
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Build all java files in the java subdirectory
LOCAL_SRC_FILES := $(call all-subdir-java-files)
# Name of the APK to build
LOCAL_PACKAGE_NAME := LocalPackage
LOCAL_CERTIFICATE := vendor/example/certs/app
# Tell it to build an APK
include $(BUILD_PACKAGE)
五、裝載一個普通的第三方APK
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Mole name should match apk name to be installed.
LOCAL_MODULE := LocalMoleName
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := platform
include $(BUILD_PREBUILT)
六、裝載需要.so(動態庫)的第三方apk
LOCAL_PATH := $(my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := input_android_v1.1_1000e
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := platform
include $(BUILD_PREBUILT)
#################################################################
####### the library to /system/lib #########################
#################################################################
include $(CLEAR_VARS)
LOCAL_MODULE := libinputcore.so
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)
LOCAL_SRC_FILES := lib/$(LOCAL_MODULE)
OVERRIDE_BUILD_MODULE_PATH := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)
include $(BUILD_PREBUILT)
七、編譯一個靜態java庫
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Build all java files in the java subdirectory
LOCAL_SRC_FILES := $(call all-subdir-java-files)
# Any libraries that this library depends on
LOCAL_JAVA_LIBRARIES := android.test.runner
# The name of the jar file to create
LOCAL_MODULE := sample
# Build a static jar file.
include $(BUILD_STATIC_JAVA_LIBRARY)
註:LOCAL_JAVA_LIBRARIES表示生成的java庫的jar文件名。
❹ 如何解決Android 6.0中無法編譯出jar
1、將jar包放入項目里的libs文件夾中。
2、在project選中jar包點擊右鍵"Add as library"。
3、這兩步是網上比較容易找到的,但此時項目仍然是無法正常編譯的,這時需要在項目的build.gradle文件里的dependencies節加入 dependencies
{
compile files('libs/android-support-v4.jar')
compile files('libs/xxxx.jar')
}
4、此時項目正常編譯並運行了,但當自己的代碼中真正創建了引用jar里的類實例時,有可能系統會拋出異常NoClassDefFoundError,這個時候可以按以下步驟操作:
進入命令提示符窗口。
定位到項目的根目錄,即build.gradle所在的目錄。
運行 "{android studio 安裝目錄}\sdk\tools\templates\gradle\wrapper\gradlew.bat" clean
重新編譯運行項目
❺ android gradle 怎麼編譯framework.jar
1,首先將framework.jar拷貝到項目的/libs文件夾中,然後右鍵framework.jar文件,然後Add as Library ,再選當前的mole
完了之後,在你的Mole的build.gradle中會增加了
這個時候我們已經添加了framework.jar包,但是我們還有改變framework.jar的作用域屬性,右鍵你的mole,Open Mole Setting,然後將framework.jar的Scope改為 Provided
❻ android如何將res文件夾下的資源打包到jar中
1:我現在正好也是碰到這個問題,就算把res文件夾打包進jar包中也不可以使用,如果jar包中某些類牽涉到res文件夾下的文件,則報錯。
2:你所說的像android sdk那種方式,你可以看一下android.jar這個包,裡面的res目錄顯示也是灰色的,裡面的圖片或者xml文件你同樣無法查看,所以不存在想android.jar那種方式一樣的情況。
3:有一種折中的方式,不過需要你的工程源碼。即在eclipse下,導入你的工程,然後右鍵----->Properties----- >Android------>Library 下面的Is Library 選中。 之後在你新建的工程中右鍵----->Properties----- >Android------>Library 右側 Add 選中你的工程名(jar)即可。
❼ 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,估計需要比較久的解決依賴的過程。
❽ 我把android.jar包進行反編譯,為什麼只有方法而沒有實現
1、混淆安卓自帶了混淆法,具體請網路關鍵詞:proguard,但是混淆只是加大了反編譯的難度,可以這么說,即便混淆了,只要有足夠的耐心,破解指日可待。2、使用linux的靜態鏈接so庫這類似於windows平台的dll庫,如果使用了so庫,那麼這個安卓程序幾乎不可能被反編譯到原來的代碼,所以,重要的代碼可以放入so庫。但是,道高一尺,魔高一丈,即便是so庫,也還是會有法能破解,但是,要獲得真正的源碼,幾乎不可能無源代碼的安卓APK反編譯、修改,只有你想不到,沒有做不到@@724949472
❾ android 源碼怎麼編譯android.jar
例如:你不想編譯music進image中,你就在該文件里PRODUCT_PACKAGES :=這一項下的Music刪除就可以了同理,你想把自己的app編譯進image中,你先寫好編譯用的 Android.mk 文件,然後去到上面所說的文件里在 PRODUCT_PACKAGES :=這一項添加對應的app.