Browsed by
月份:2017年7月

Mac下Android Library工程使用gradle生成jar包

Mac下Android Library工程使用gradle生成jar包

在开发sdk生成jar在eclipse里相对比较容易操作,只要导出class时指定哪里导出就可以,但在用AndroidStudio开发时要导出jar就没那么容易,需要写gradle脚本,但gradle脚本的入门成本还是比较高,网上也有打包jar的脚本参考,但大多是通过生成classes.jar重命名来生成,这样生成的jar是包含工程里所有类的,有时我们需要指定一些包和类来生成jar。
创建Android Library工程:菜单导航到 File -> New -> New Module … ,选择 Android Library,包名(com.sqstudio.test)。在gradle中加入以下脚本:
task clearJar(type: Delete) {
    delete 'libs/sdk.jar'
}
task makeJar(type:org.gradle.api.tasks.bundling.Jar) {
    //指定生成的jar名
    baseName 'sdk'
    //从哪里打包class文件
    from('build/intermediates/classes/debug/com/sqstudio/test')
    //打包到jar后的目录结构 
    into('com/sqstudio/test/')
    //去掉不需要打包的目录和文件
    exclude('BuildConfig.class', 'R.class')
    //去掉R$开头的文件 
    exclude{ it.name.startsWith('R$');}
}
makeJar.dependsOn(clearJar, build)

build.gradle写上后,只要在命令行执行gradle makeJar就可以在build/libs目录下找到这个jar包。

如果gradle执行失败,需检查环境配置(首次使用,会下载安装相关资源,需要等待)

vim ~/.bash_profile 然后加入:
GRADLE_HOME=/Applications/Android\ Studio.app/Contents/gradle/gradle-3.2;
export GRADLE_HOME
export PATH=$PATH:$GRADLE_HOME/bin

上面是个简单的例子,只能打包某个包下面的所有文件,如果要实现只打某个包下面的某些子包或者文件可参考如下示例:

task makeSdkJar(type:org.gradle.api.tasks.bundling.Jar) {
    baseName 'pluginsdk'
    //只打包org.cmdmac下的org.cmdmac.pluginsdk.impl和org.cmdmac.gamecenter,其他子包不会被打包进去
    from('build/intermediates/classes/debug/org/cmdmac/') {
        include 'pluginsdk/impl'
        include 'gamecenter'
    }
    into('org/cmdmac/')
//    exclude('R.class')
//    exclude{ it.name.startsWith('R$');}
}

 

参考资料:http://www.alloyteam.com/2015/03/shi-yong-gradle-da-bao-zhi-ding-bao-ming-he-lei-di-jar/

使LitJson支持Unity的类型

使LitJson支持Unity的类型

在使用LitJson时,会发现不支持Unity的Vector3等类型,更为奇怪的是在Unity的Editor模式下是正常的,在真机设备上不行了,今天查看源码终于找到原因了。

LitJson本身为支持Unity已经定义了一个类UnityTypeBindings,局部代码如下:

#if UNITY_EDITOR
[UnityEditor.InitializeOnLoad]
#endif
public static class UnityTypeBindings {

   static bool registerd;

   static UnityTypeBindings(){
      Register();
   }

就是因为在UNITY_EDITOR下加了标签[UnityEditor.InitializeOnLoad],所以在编辑器模式下支持Vector3等类型,因此只需要在项目加上如下代码即可:

UnityTypeBindings.Register()

参照以下注册方法,可实现自定义类型的Json序列化支持

Action<Vector2,JsonWriter> writeVector2 = (v,w) => {
   w.WriteObjectStart();
   w.WriteProperty("x",v.x);
   w.WriteProperty("y",v.y);
   w.WriteObjectEnd();
};

JsonMapper.RegisterExporter<Vector2>((v,w) => {
   writeVector2(v,w);
});

参考资料:
LitJson官网:http://lbv.github.io/litjson/