Ⅰ 怎么让android生成jar包
将Android打包成jar包供人使用,可利用java的反射技术,获取相应的id.方便使用者替换自己所需要的。
1.新建Android项目:ActivityLibrary,这就是需要我们打包成jar包的项目:
2.MResource这个类的作用,就是利用J2SE反射技术获取相应的ID资源。Android SDK也提供了获取Id资源的方法:getResources().getIdentifier("main_activity", "layout", getPackageName());
看下MResource的代码:
[java] view plain
package com.example.activitylibrary;
import android.content.Context;
/**
* 根据资源的名字获取其ID值
* @author howlaa
*/
public class MResource {
//根据名称获取ID
Ⅱ 如何制作Jar包并在android中调用jar包
Android中jar包封装及调用
在android开发过程中,我们经常会有这种需求,自己开发一个类库jar包,提供给别人调用。 即把项目A封装成jar包,供项目B调用,而在项目B中调用项目A的activity的时候问题就出现了:找不到资源文件(异常:ERROR/AndroidRuntime(3341):Caused by: android.content.res.Resources$NotFoundException: Stringresource ID #0x7f060007)。问题是,只能共享src文件夹下的代码,而不能共享res资源文件,够郁闷!创建一个Androidproject, 用eclipse的export导出,去掉AndroidManifest.xml,res 什么的,这样只共享了代码,而此代码中所调用的res资源文件却不能正常使用,否则会抛出res.Resources$NotFoundException异常。那么如何解决呢?
1.如果只用共享代码,而共享的代码中不涉及到res资源文件的调用的话,直接在Eclipse中导出jar包,在所需要的项目中引用即可。
2.如果共享代码,而且共享的代码中涉及到res资源文件的调用,网上通用的方法是把res资源文件放到assets文件夹中,再在src代码中加载处理,然后再用eclipse导出jar包,引用即可(res资源虽然可以打进jar包,但当其他项目调用jar包时jar包中引用ID 指向的是当前项目的资源,关于如何让jar包中的资源引用只想jar包中的res文件暂无解决方案。我的问题已解决,解决方案:把图片资源放入assets包中一并打入jar包,布局就只能用代码了。jar包中代码可以成功引用jar包内的assets文件。
另:JNI层不可被打包入jar包,只能同jar包一同提供给第三方并放入工程目录下的libs包中)。
3.如果共享代码,而且涉及到res资源文件的调用,而且不想把res资源文件放到assets文件夹中的,直接生成jar包会出现的问题:
1).当在别的项目中引用此jar包时,在项目名上出现小红叉,并且在console控制台上直接自动提示:Errorgenerating final archive: Found plicate file for APK:res/drawable-hdpi/icon.png,通常的解决方法时,在能编译通过的此项目中直接去掉提示的资源文件,再生成jar包。
2).把公共的icon等资源文件删除,生成jar包之后,此时在项目中引用,console控制台上无自动报错现象。如果jar包中的activity调用了res资源文件夹中的文件,在当前项目中调用jar包中的acticity时,问题就出现了,activity所引用的res资源,如果引用的是Strings.xml文件中的值,则抛出异常ERROR/AndroidRuntime(3341):Caused by: android.content.res.Resources$NotFoundException:Stringresource ID#0x7f060007。如果引用的是layout文件夹中的文件,能找到layout中的xml,例如layout中ee.xml,可以找到R.layout.ee,但是在ee.xml中定义的控件id却引用不到,抛出异常ERROR/AndroidRuntime(13703):Caused by:java.lang.NullPointerException。如果在当前项目中调用不涉及jar包中的res的调用,一切OK。
4.如果共享代码,而且共享的代码中涉及到res资源文件的调用,如果封装成jar包,这种方法是达不到要求的(调用jar中封装的activity,还得保证jar包中activity正常调用jar中所封装的res资源,上面说了,jar包中的res资源部分调用为空),那么如何能满足需求呢?把要生成jar包的项目做一下处理,在jar包项目的properties窗口中选择android的选项卡的isLibaray,点击apply按钮或者ok按钮(此时,jar包项目再点击右键选择runas → AndroidApplication就能正常运行了)。在要引用jar包的项目中,右击项目名称,打开properties框口,选择android的选项卡的isLibaray右侧的Add按钮,添加jar包项目。这样jar包项目中的activity就能正常引用到jar包项目中的res资源了。项目调用jar包项目的activity就正常了。
Ⅲ 安卓studio怎么把aidl打包成jar包
点击启动AndroidStudio,启动后的界面如图所示。
复制你需要添加的jar,并将其黏贴到app— —src— —main— —libs文件夹下,可运行的AndroidStudio项目都有像这样的目录结构。可以看到虽然jar已经复制黏贴过来了,但是还未导入,所以看不到jar中包含的内容。而已导入的jar,则可以看到jar中内容。
右键点击新黏贴的jar,在弹出菜单中点击Add As Library.
选择你要导入到的那个mole(在AndroidStudio中相当于Eclipse中的project),如果当前只是一个项目,下拉框中除了app也没有其他的内容,那么直接点击ok确认。
这样jar就被添加到项目中来了。
Ⅳ android怎么把一个mole封装jar包
你打包android处于什么目的呢? 如果的android项目不包括任何资源引用(layout,image)等,而纯粹是个公共类库。那么建议直接新建一个java project。该project引用android Library。 如果你的android项目包括资源引用。那么不建议将其打包成jar。建议将其作为library project。方法很简单,右击属性。选择android,勾选isLibrary。引用时只需要在属性中选择addLibrary即可。
Ⅳ android ui可以打成jar包吗
(两年前写下来的。)JAR文件全称Java Archive File,意思是Java档案文件。通常JAR文件是一种压缩文件,可以用WINRAR,ZIP打开。JAR文件与ZIP文件区别是JAR文件中包含一个META-INF/MANIFEST.MF的清单文件。这个清单文件是生成JAR文件时由系统自动创建的。 JAR文件通俗来讲就是把程序的class文件,打成一个压缩包,方便他人使用,如桌面应用程序中做的一些皮肤,还有后面学习的连接数据库所需要的驱动,都是以JAR包的形式提供给大家。 在Java中如果是客户端的程序要直接运行,通常不是.exe文件,而是生成可执行的JAR包。 下面就给大家讲讲如何打JAR包,如何做一个可执行的JAR包。 一、打JAR包,两种方法1、使用jar命令cmd--> jar 就会出现帮助和示例。实际上就是把.class文件(JAVA的可执行的二进制文件)打成一个压缩包。 看示例自己试试吧。 *再要配置环境变量哦 2、在Eclipse中打JAR包 (1). 首先在Eclipse中打开项目,右键点击项目,选择“Export”; (2.) 选择Java/JAR file,Next; (3). Select the resources to export中可以选择你想要包含的项目文件夹,一些不必要的文件夹就无需放进去了,免得增大空间;这里有几个选项: * Export generated class files and resources 表示只导出生成的.class文件和其他资源文件 * Export all output folders for checked projects 表示导出选中项目的所有文件夹 * Export java source file and resouces 表示导出的jar包中将包含你的源代码*.java,如果你不想泄漏源代码,那么就不要选这项了 * Export refactorings for checked projects 把一些重构的信息文件也包含进去在Select the export destination中选择导出的jar的路径,Next (4.) 下一页可以选择是否导出那些含有警告warning或者错误errors的*.class文件。一般不用理他,Next (5). 下一个页面里可以对项目做一些配置。 * Generate the manifest file是系统帮我们自动生成MANIFEST.MF文件,如果你的项目没有引用其他class-path,那可以选择这一项。 * Use existing mainfest from workspace。这是可以选择我们自定义的.MF文件,格式如上所写。 * Seal content。要封装整个jar或者指定的包packet * Main class。这里可以选择你的程序入口,将来打包出来的jar就是你这个入口类的执行结果。(这个在下面细讲)最后Finish,搞定。 二、可执行的JAR包 创建可执行的JAR包关键在于:让java命令知道JAR包中哪个是主类(有main方法的那个类,开始运行的那个类),javaw命令可以通过该主类来运行程序,这就需要借助清单文件,需要在清单文件中增加如下一行:Main-Class: accp.ui.Test2 注意这个文件格式要求非常严格:Main-Class:<空格>包名.类名<回车> 注意后面必段有一个回车。 MANIFEST.MF文件:l 每行只能定义一个key-value对,每行必须顶格写。l 每组key-value之间以: (英文冒号后紧跟一个英文空格)。l 文件开头不能有空行。l 文件必须以一行空行结束。
Ⅵ android如何将res文件夹下的资源打包到jar中
1.打包时,将资源放在asset文件夹内,通过AssetsManager获取指定资源:
目标应用和jar中的assets文件夹会合并,所以可以通过获取该应用的此类文件夹来获取目标资源
2.使用library项目
此类方法不能混淆代码,也就是说发布时需要提供library源项目.在引用此lib的目标项目中会看到一个包含已经编译成class.dex的jar文件,这个文件反编译以后仍然是只有代码部分。
3.使用双重library项目
提供一种双层library项目的方法,可以混淆代码,但是xml与图片资源仍然是暴露的,且发布时需要提供二级引用项目,操作上复杂度较高,不如直接提供jar包和资源
4.直接提供jar包和资源(分开)
依然是反射R文件,资源会被暴露给开发者。
Ⅶ 如何使用Android Studio打包混淆的Jar
使用AS打包混淆Jar包,网络一下,一片一片的,但是很多都是零零散散的写得不是很详细或是直接拷贝,按照他们的教程测试总不是很顺利,所以这里我就把我个人学习AS打包混淆Jar的成果总结出来,希望对大家有帮助。个人觉得写得还是比较详细的
使用gradle混淆打包Jar
使用AS开发项目,引入第三方库是非常方便的,我们只需要在build.gradle中配置一行代码就可以轻松引入我们需要的开发库。那么gradle可以帮我们混淆打包Jar吗?答案是当然可以!
那么我们如何打包Jar呢?其实我们在编译项目的时候,AS已经帮我们在目录build/intermediates/bundles/release/classes.jar打好了Jar。那么我们需要做的就是把Jar进行混淆的工作了。这里以个人项目bannerDemo为例,混淆步骤如下:
在你的library的build.gradle文件中加入如下代码:
task makeJar(type: proguard.gradle.ProGuardTask, dependsOn: "build") {
// 未混淆的jar路径
injars 'build/intermediates/bundles/release/classes.jar'
// 混淆后的jar输出路径
outjars 'build/outputs/cocolove2-banner-1.1.0.jar'
// 混淆协议
configuration 'proguard-rules.pro'}
配置混淆协议
1.我们先把AS自带的协议配置进来中文注释,笔者添加
# This is a configuration file for ProGuard.# http://proguard.sourceforge.net/index.html#manual/usage.html## Starting with version 2.2 of the Android plugin for Gradle, these files are no longer used. Newer# versions are distributed with the plugin and unpacked at build time. Files in this directory are# no longer maintained.#表示混淆时不使用大小写混合类名-dontusemixedcaseclassnames#表示不跳过library中的非public的类-#打印混淆的详细信息-verbose# Optimization is turned off by default. Dex does not like code run# through the ProGuard optimize and preverify steps (and performs some# of these optimizations on its own).-dontoptimize##表示不进行校验,这个校验作用 在java平台上的-dontpreverify# Note that if you want to enable optimization, you cannot just# include optimization flags in your own project configuration file;# instead you will need to point to the# "proguard-android-optimize.txt" file instead of this one from your# project.properties file.-keepattributes *Annotation*
-keep public class com.google.vending.licensing.ILicensingService-keep public class com.android.vending.licensing.ILicensingService# For native methods, see http://proguard.sourceforge.net/manual/examples.html#native-keepclasseswithmembernames class * {
native <methods>;
}# keep setters in Views so that animations can still work.# see http://proguard.sourceforge.net/manual/examples.html#beans-keepclassmembers public class * extends android.view.View {
void set*(***);
*** get*();
}# We want to keep methods in Activity that could be used in the XML attribute onClick-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}# For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keepclassmembers class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator CREATOR;
}
-keepclassmembers class **.R$* {
public static <fields>;
}# The support library contains references to newer platform versions.# Don't warn about those in case this app is linking against an older# platform version. We know about them, and they are safe.-dontwarn android.support.**# Understand the @Keep support annotation.-keep class android.support.annotation.Keep-keep @android.support.annotation.Keep class * {*;}-keepclasseswithmembers class * {
@android.support.annotation.Keep <methods>;
}
-keepclasseswithmembers class * {
@android.support.annotation.Keep <fields>;
}
-keepclasseswithmembers class * {
@android.support.annotation.Keep <init>(...);
}
2.AS自带的配置文档还是不够的,我们还需要加入如下配置
这里只展示基本操作,在实际开发中可能需要更多依赖,要根据具体情况引入自己需要的依赖包
#下面代码中的xx是指我个人的配置路径,涉及个人信息,这里以xx代替
#引入依赖包rt.jar(jdk路径)
-libraryjars /xxx/xx/xx/jdk1.8.0_77.jdk/Contents/Home/jre/lib/rt.jar
#引入依赖包android.jar(android SDK路径)
-libraryjars /xx/xx/xx/Android/sdk/platforms/android-24/android.jar
#如果用到Appcompat包,需要引入
-libraryjars /xxx/xxx/xx/xxx/MyApplication/library-banner/build/intermediates/exploded-aar/com.android.support/appcompat-v7/24.1.1/jars/classes.jar
-libraryjars /xx/xx/xx/xx/MyApplication/library-banner/build/intermediates/exploded-aar/com.android.support/support-v4/24.1.1/jars/classes.jar
#忽略警告
-ignorewarnings
#保证是独立的jar,没有任何项目引用,如果不写就会认为我们所有的代码是无用的,从而把所有的代码压缩掉,导出一个空的jar
-dontshrink
#保护泛型
-keepattributes Signature
3.加入自己不想混淆的配置根据实际需求配置
-keep class com.cocolove2.library_banner.view.**{*;}
在命令行执行命令混淆Jar,提示BUILD SUCCESFUL表示成功!
//mac./gradlew makeJar//windowsgradlew makeJar
示例展示
我这里以混淆library-banner库为例
1.首先我们要看看下我们的buildTool的配置,如下图:
混淆报错解决办法个人遇到的
proguard5.2.1下载地址
阅读
Ⅷ androidstudio怎么将写好的so文件工程打包成jar包
Android Studio的so库导入和Eclipse的方式有些不同。在Android Studio中,要在工程的src/main下面新建一个jniLibs文件夹,然后将所用到的第三方so库复制进来,然后找到Project下的build.gradle文件,在其中添加以下几行代码:
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
task nativeLibsToJar(type: Zip, description: "create a jar archive of the native libs") {
destinationDir file("$projectDir/libs")
baseName "Native_Libs2"
extension "jar"
from fileTree(dir: "libs", include: "**/*.so")
into "lib"
}
然后重新Gradle一下代码,第三方so库就加了进来。
参考http://www.cnblogs.com/devpan/p/5536238.html
Ⅸ Android中如何把一个应用以jar包的形式在另
jar包只能打包class类安卓应用还有其他资源文件,所以不能以jar包的方式打包一个应用。可以用lib或者直接把代码复制到目标项目中。
Ⅹ android jar包都包含哪些
jar包主要是用于android程序里面引用的各种组件库,无法在android系统里面直接安装。而apk是将各种jar包,包括自己编写的程序代码等等打包成一个安装文件,可以在android系统里直接安装