小编Sab*_*ado的帖子

Android Gradle Build System:创建Jar Not Library

目前我在eclipse工作.我想迁移到Android Studio但是我需要先解决这个问题:如何使用新的android构建系统为我的项目创建一个jar?

我的项目设置为库,但项目中只有java文件.我不需要或想要将其导出为库.我想将文件导出为.jar,以便可以轻松地将其放入另一个项目中.

更新 这是我的gradle文件.我无法添加该行,apply plugin java因为它与android插件不兼容.jar任务已经包含在android插件中.

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.4'
    }
}
apply plugin: 'android'

dependencies {
    compile files('libs/android-support-v4.jar')
}

android {
    compileSdkVersion 17
    buildToolsVersion "17.0.0"

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 16
    }
}

sourceSets {
    main  {
        java {
            srcDir 'src/main/java'
        }
    }
}
task jar(type: Jar) {
    from sourceSets.main.java
}
Run Code Online (Sandbox Code Playgroud)

我正在运行脚本: gradle clean jar

当我执行任务时,没有任何反应......为什么?我错过了什么?

更新2

下面是我正在使用的新gradle构建文件.请注意由于android studio的最新更新而导致的gradle版本更改.即使很简单,clean build我也会收到此错误:Project directory '<my_workspace_path>\Core2Project\build.gradle' is not a directory. …

jar gradle android-studio

21
推荐指数
1
解决办法
1万
查看次数

Android Gradle代码覆盖率

我有一个简单的android项目与测试用例.

ProjNameProject
--build.gradle
--ProjName
----build.gradle
Run Code Online (Sandbox Code Playgroud)

我看到默认情况下,android的新构建系统默认提供基本的测试结果.(万岁!)

现在我想看看代码覆盖率.我知道如何使用Emma和Ant脚本进行设置,但是我不想在这里运行Ant脚本.我觉得这会破坏我使用新构建系统的目的.

我尝试过在Github上找到的一些Cobertura插件.特别是:https: //github.com/stevesaliman/gradle-cobertura-plugin

但是,如果我尝试在ProjName构建文件中使用插件,那么我会收到有关java插件的错误.我在tools.android.com上读到,添加java插件会产生这种行为.我没有应用它,所以cobertura插件必须.
如果我尝试在主构建文件中使用插件,那么我没有看到java错误,但现在我看到:

Could not find net.sourceforge.cobertura:cobertura:1.9.4.1.
    Required by:
        :ProjNameProject:unspecified
Run Code Online (Sandbox Code Playgroud)

我该怎么办??

android gradle android-studio

9
推荐指数
2
解决办法
2万
查看次数

Android UI使用CI中的存储权限进行测试

我想在CI(Jenkins Pipeline)中的项目上运行UI测试和单元测试.UI测试要求图像和视频位于测试设备/仿真器上.在UI测试中,我请求存储读/写访问权限,因此我可以将一些资源转储到下载文件夹中,然后在测试套件的末尾将其删除.

当我在Jenkins(mac)上运行我的测试时,没有授予权限,没有媒体转移,我的所有测试都失败了.

该项目包含一个应用程序模块和两个内部库模块.

管道步骤

建立

sh "./gradlew clean assembleRelease"
Run Code Online (Sandbox Code Playgroud)

单元测试

sh "./gradlew testReleaseUnitTest"
Run Code Online (Sandbox Code Playgroud)

UI测试

sh "$ANDROID_HOME/emulator/emulator @my_sweet_emulator_name -no-boot-anim & $ANDROID_HOME/platform-tools/adb wait-for-device"
sh './gradlew connectedAndroidTest'
Run Code Online (Sandbox Code Playgroud)

问题

1)CI构建依赖于隐式assembleDebugAndroidTest任务

2)如果我在计算机的命令行上运行该任务,则测试将安装但是未授予读/写存储权限,因此所有测试都因设备上没有任何预期内容而失败.

我试过的事情

  • 我曾尝试仅测试发布版本,但这显示了相同的问题2. testBuildType "release"
  • 我没有其他权限需要处理

我如何授予权限

@RunWith(AndroidJUnit4::class)
class MyMediaClassTest {

    @Rule
    @JvmField
    val activityRule = ActivityTestRule(MainActivity::class.java)

    @Rule
    @JvmField
    val grantPermissionRule: GrantPermissionRule = GrantPermissionRule
            .grant(android.Manifest.permission.READ_EXTERNAL_STORAGE,
                    android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
// tests and stuff
}
Run Code Online (Sandbox Code Playgroud)

我已经看到了一个短期解决方案,可以将我的所有媒体资产手动复制到模拟器中.但这似乎不对,这应该能够实现自动化.

android ui-testing jenkins-pipeline

8
推荐指数
1
解决办法
284
查看次数

Android:高效的屏幕旋转处理

在Android中,当屏幕方向发生变化时(在横向和纵向之间),onCreate会调用该方法,如果处理不当,则会在结果过于简单地更改布局并保留所有相同信息时重新创建整个活动.

我知道有几种方法可以解决这个问题,但我对最有效的方式感兴趣.

1)通过覆盖onConfigurationChanged()方法并将其留空来告诉清单我将处理方向更改.

2)覆盖onSaveInstanceState()并保存此处要重新填充的数据onCreate()

3)覆盖onPause()将创建数据包并将其发送到onSaveInstanceState()

显然,这些都是选项,但哪一个是更好的做法(小,中,大量数据)

谢谢

android screen rotation screen-orientation orientation-changes

7
推荐指数
1
解决办法
1万
查看次数

Loader:onLoadFinished只调用一次

我在一个活动中使用了一个加载器.我能够启动加载器并调用onLoadFinished.当我更新数据并onContentChanged在加载器中调用时,我看到loadInBackground并且deliverResult都被调用.这是小道似乎停止的地方.我没有收到任何回调onLoadFinished.

如果我重新创建活动(也就是方向更改或重新启动),那么它将以相同的方式运行.

我正在使用support-v4加载器和加载器管理器.

SharedPreferenceLoader基于CommonsWare的加载器:

public class SharedPreferencesLoader extends AsyncTaskLoader<SharedPreferences>
        implements SharedPreferences.OnSharedPreferenceChangeListener {
    private SharedPreferences prefs = null;

    private static final String TAG = SharedPreferencesLoader.class.getSimpleName();

    public SharedPreferencesLoader(Context context) {
        super(context);
    }

    @Override
    public SharedPreferences loadInBackground() {
        Log.v(TAG, "wol: load in background");
        prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
        prefs.registerOnSharedPreferenceChangeListener(this);

        return (prefs);
    }

    @Override
    protected void onStartLoading() {
        if (prefs != null) {
            deliverResult(prefs);
        }

        if (takeContentChanged() || prefs == null) {
            forceLoad();
        } …
Run Code Online (Sandbox Code Playgroud)

android android-loader android-support-library commonsware-cwac

7
推荐指数
1
解决办法
694
查看次数

Java Web Service返回带有&gt;的字符串 和&lt; 而不是>和<

我有一个返回字符串的java Web服务.我用a DocumentBuilderDocumentclass 创建了这个xml字符串的主体.当我查看返回的XML的源代码(在浏览器窗口中看起来很好)而不是<>它返回&lt;&gt;围绕XML节点.

请帮忙.

****UPDATE(包括代码示例)
代码不包括任何错误捕获,为简单起见,它被剥离.包含一个代码块和三个方法:第一个代码块(示例设置)显示了Document对象设置的基础知识.该方法appendPayment(...)是实际文档构建发生的地方.它调用了两个辅助方法getTagValue(...)prepareElement(...)
**注意,此代码用于从预先存在的xml字符串中复制特定部分xmlString,并获取稍后要返回的必要信息.

****更新2 在问题结尾处添加了回复

************第一个答案的后续问题在这里:
如何使用Eclipse/AXIS2 POJO服务返回任意XML文档

EXAMPLE SETUP
{
    //create new document
    DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder newDocBuilder = docFactory.newDocumentBuilder();
    Document newDoc = newDocBuilder.newDocument();
    Element rootElement = newDoc.createElement("AllTransactions");

    newDoc.appendChild(rootElement);
    appendPayment(stringXML, newDoc);
}

public static void appendPayment(String xmlString, Document newDoc) throws Exception
{
    //convert string to inputstream
    ByteArrayInputStream bais = new ByteArrayInputStream(xmlString.getBytes());
    DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); …
Run Code Online (Sandbox Code Playgroud)

java xml web-services

5
推荐指数
1
解决办法
1万
查看次数

SQLite使用默认值添加列

我在Android SQLite DB中工作.我正在将它从版本1升级到版本2.该onUpgrade方法按预期调用.

我的代码:

sqLiteDatabase.execSQL("ALTER TABLE " + Contracts.DateActivities.TABLE_NAME + " ADD COLUMN " + Contracts.DateActivities.C_GROUP + " INTEGER DEFAULT 0;");
Run Code Online (Sandbox Code Playgroud)

我一直得到同样的错误:

Caused by: android.database.sqlite.SQLiteException: near "group": syntax error (code 1): , while compiling: ALTER TABLE DateActivities ADD group INTEGER DEFAULT 0
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

我试过的其他变化:

sqLiteDatabase.execSQL("ALTER TABLE " + Contracts.DateActivities.TABLE_NAME + " ADD COLUMN " + Contracts.DateActivities.C_GROUP + " INTEGER DEFAULT 0;");
sqLiteDatabase.execSQL("ALTER TABLE " + Contracts.DateActivities.TABLE_NAME + " ADD COLUMN " + Contracts.DateActivities.C_GROUP + " int DEFAULT 0;"); …
Run Code Online (Sandbox Code Playgroud)

android android-sqlite

5
推荐指数
1
解决办法
3405
查看次数

Android无效的地图API密钥

我正在尝试在Android应用中使用MapView.

我看过很多文章告诉我如何获取debug.keystore指纹,但是当我得到我的并将其置于在线时,我被告知它无效.我注意到的是,当我获得指纹时,它有20个不同的十六进制数,而输入的示例键只有16个.我缩短了我的(删除了最后4个)并且它有效.

但是,我把这个键放在我的代码中,当我加载活动屏幕时,我看到网格,我的标记和缩放控件,但没有地图.我看到的任何地方都说钥匙有问题.我很好,但我需要一些帮助才能获得指纹.

**编辑我刚才注意到的是它给我的指纹是SHA1而不是MD5.那么如何切换呢?keyalg参数设置为RSA,因此它应该默认为MD5 ...

android google-maps-api-3

4
推荐指数
1
解决办法
2499
查看次数

Java:继承并成为单身人士

首先,我不是要创建单例类的子类.(至少我确定我不是想).

我有一个ClassA抽象的课.

我有两个课程,ClassA1并且ClassA2延伸ClassA.

我想要ClassA1ClassA2成为单身人士课程.我可以在每个代码中编写代码来执行此操作,但我更愿意将代码编写一次ClassA并在其所有子类中重用它.有没有办法做到这一点?

java inheritance singleton

3
推荐指数
1
解决办法
1882
查看次数

MySQL双加入

我有两张桌子:

teams
----------------
|uid|name |rank|
----------------
|  1  |Team1|  1  |
|  2  |Team2|  2  |
----------------

games
-----------------------------------------------------------------------
|uid|team_one_uid|team_one_score|team_two_uid|team_two_score|game_date|
-----------------------------------------------------------------------
|1|1|70|2|50|2012-12-12|
Run Code Online (Sandbox Code Playgroud)

团队表有一个团队列表和其他数据,如排名.游戏表有一个游戏列表,并通过它的唯一ID(uid)引用每个团队.我可以运行什么查询以查看包含具有以下列的行的结果:

game_uid, team_one_name, team_one_rank, team_one_score, team_two_name, team_two_rank, team_two_score, game_date
Run Code Online (Sandbox Code Playgroud)

mysql join

3
推荐指数
1
解决办法
2万
查看次数

Google IO 2013 App神秘价值观

我想利用的SVGTileProvider是在发现谷歌IO 2013的应用程序.我无法弄清楚如何在谷歌地图上定位图像.我把它缩小到了课程的这一部分.这些不是纬度/经度坐标,但不管怎样它们必须来自纬度/经度坐标.有谁知道这些是什么或它们来自哪里?

mBaseMatrix.setPolyToPoly(
    new float[]{
        0, 0,
        limits.width(), 0,
        limits.width(), limits.height()
    }, 0,
    new float[]{
        40.95635986328125f, 98.94217824936158f,
        40.95730018615723f, 98.94123077396628f,
        40.95791244506836f, 98.94186019897214f
    }, 0, 3);
Run Code Online (Sandbox Code Playgroud)

更新

第一组神秘数字大致翻译为纬度/经度37.783887,-122.405107.

更新2

这些方法可以帮助我将纬度转换为y值,反之亦然.我如何为X和经度做这个?

public static double y2lat(double aY) {
    return Math.toDegrees(2 * Math.atan(Math.exp(Math.toRadians(aY))) - Math.PI / 2);
}
public static double lat2y(double aLat) {
    return Math.toDegrees(Math.log(Math.tan(Math.PI / 4 + Math.toRadians(aLat) / 2)));
}
Run Code Online (Sandbox Code Playgroud)

android tile googleio google-maps-android-api-2

3
推荐指数
1
解决办法
287
查看次数

Android:让Parent View Handle On Click

我有一个RelativeLayout包含几个项目:一个ImageView和一些小TextView的.从功能上来说,如果单击任何内容,我希望在点击事件触发时具有相同的功能RelativeLayout.在视觉上我想看到RelativeLayout更改的背景,以便它显示正在单击整个布局(或"项目").

我的问题是,每次点击TextView" 点击"时,点击都不会传播回父视图,因此背景颜色不会改变.我怎样才能做到这一点?

android onclick relativelayout android-layout

2
推荐指数
1
解决办法
2991
查看次数

CSS使水平列表内容填充高度

http://jsfiddle.net/K4ZGg/ 更新这是正确的jsfiddle链接

到目前为止,我的JsFiddle有我的尝试.我真的想让菜单中的项目填充菜单的高度,并在其列表项中居中.

请帮忙.(我为这个问题的简单而道歉,我保证我已经试图解决这个问题了一段时间)

HTML

<header id="navmenu">
    <ul>
        <li>
            <label>Welcome <span id="firstName"></span></label>
        </li>
        <li>
            <a href="#" onclick="return false;">Option One</a>
        </li>
        <li>
            <a href="#" onclick="return false;">Option Two</a>
        </li>
    </ul>
</header>
Run Code Online (Sandbox Code Playgroud)

裸CSS(Full是在JsFiddle链接上)

#navmenu {
    background-color: rgba(250, 250, 210, 1);
    text-align:right;
    height:42px;
    width:100%
}
#navmenu ul {
    height:42px;
}
#navmenu ul li {
    display:inline;
    padding: 0 8px;
    height: 100%;
    border-right: solid 1px black;
}
#navmenu ul li:last-child {
    border-right: 0;
}
Run Code Online (Sandbox Code Playgroud)

css3 fill html-lists

1
推荐指数
1
解决办法
8157
查看次数