小编and*_*asv的帖子

使用Bitcode构建iOS库,以便与XCode 6向后兼容.如何?

我正在构建一个iOS静态库,我想为bitcode提供支持.为了实现这一点,我转到Build settings,搜索"custom compiler flags"并添加-fembed-bitcode.这使用bitcode构建库,在XCode 7下一切正常.

然而,按照上面的方法,我放松了与XCode 6的向后兼容性.据说我必须向我的用户发送2个不同的库版本,一个带有bitcode标志,一个没有,因为不是每个人都升级到XCode 7.

有没有办法让bitcode启用库并具有向后兼容性,而无需发送2个不同的版本?

更新:

您好@Vinicius Jarina感谢您的留言.我知道你可以创建一个胖库,我想这是一种常见的做法.到目前为止我所做的是为两种架构构建:

xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdK iphoneos 
xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphonesimulator
Run Code Online (Sandbox Code Playgroud)

然后调用lipo打包在胖库中,如:

lipo -create "${DEVICE_DIR}/${FMK_NAME}" "${SIMULATOR_DIR}/${FMK_NAME}" -output "${INSTALL_DIR}/Versions/${FMK_VERSION}/${FMK_NAME}"
Run Code Online (Sandbox Code Playgroud)

但是,我现在该怎么办呢?我根据这个链接尝试了类似的东西,但没有运气:

xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphoneos
xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphonesimulator
xcodebuild -configuration "Release" OTHER_CFLAGS='-fembed-bitcode' -target "${FMK_NAME}" -sdk iphonesimulator
xcodebuild -configuration "Release" OTHER_CFLAGS='-fembed-bitcode' -target "${FMK_NAME}" -sdk iphoneos
Run Code Online (Sandbox Code Playgroud)

然后像这样创建一个胖lib:

lipo -create "${DEVICE_DIR}/${FMK_NAME}" "${SIMULATOR_DIR}/${FMK_NAME}" -output "${INSTALL_DIR}/Versions/${FMK_VERSION}/${FMK_NAME}"
Run Code Online (Sandbox Code Playgroud)

我如何在我的scipt中包含两者,然后将它们打包到一个胖库中?

更新2:

我终于成功完成了这项工作,我在这里列出了可能面临同样问题的其他人的解决方案:

xcodebuild -configuration "Release" ENABLE_BITCODE=NO …
Run Code Online (Sandbox Code Playgroud)

ios xcode6 ios9 xcode7 bitcode

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

如何使用gradle从.AAR Android库存档中排除文件

我正在尝试使用Android Studio和gradle为库Android项目创建AAR文件.

我想从此存档中排除特定的文件夹和文件,但我找不到有效的解决方案.

该项目有两种口味.

app/
|--libs/
|--src/
   |--flavour1/
   |  |--java/
   |     |--a1/
   |     |  |--class_File1.java
   |--flavour2/
   |  |--java/
   |     |--a1/
   |     |  |--class_File1.java
   |--main/
      |--java/
      |  |--...
      |--res/
      |  |--raw/
      |  |  |--comments.txt
      |  |--...
      |--AndroidManifest.xml
Run Code Online (Sandbox Code Playgroud)

我使用像这样的build.gradle文件

apply plugin: 'com.android.library'

android {
compileSdkVersion 21
buildToolsVersion "21.1.2"

defaultConfig {
    minSdkVersion 10
    targetSdkVersion 21
}
packagingOptions {
    exclude 'assets'
    exclude '**/comments.txt'
}


sourceSets {

        flavour1 {
            resources {
                exclude '**/comments.txt'
            }
        }
        flavour2 {

        }

}

buildTypes {
    release {
        minifyEnabled true …
Run Code Online (Sandbox Code Playgroud)

android gradle android-gradle-plugin aar

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

iOS - 以编程方式添加/删除子视图

好吧我想添加一个UIImageView作为子视图,然后在启动画面工作的几秒钟后删除它.我找到了三种不同的方法,但根据Objective-C和Apple,我无法理解哪种方法是最好的方法.

以下是三种不同的方法:

1)在我的MyAppDelegate.h中

@interface MyAppDelegate : NSObject <UIApplicationDelegate> {

    MyViewController *myViewController;
    UIImageView *myImageView;
}


@property (nonatomic, retain) IBOutlet MyViewController *myViewController;
@property (nonatomic, retain) IBOutlet UIWindow *window;

@end
Run Code Online (Sandbox Code Playgroud)

在MyAppDelegate.m中

   - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    myImageView =[[UIImageView alloc] initWithFrame:CGRectMake(0.0,0.0,self.window.frame.size.width,self.window.frame.size.height)];

        myImageView.image=[UIImage imageNamed:@"Yoga.png"];


    [self.window addSubview:myImageView ];
    [self.window bringSubviewToFront:myImageView];

    [self performSelector:@selector(removeImage) withObject:nil afterDelay:2.5];

    return YES;
}

-(void) removeImage
{
    [myImageView removeFromSuperview];

    [myImageView release];

    [self.window addSubview:myViewController.view];
    [self.window makeKeyAndVisible];
}
Run Code Online (Sandbox Code Playgroud)

2)在第二种方法中:

In my MyAppDelegate.h


@interface MyAppDelegate : NSObject <UIApplicationDelegate> {

    MyViewController *myViewController;
    UIImageView *myImageView;
}

@property …
Run Code Online (Sandbox Code Playgroud)

iphone objective-c subview uiimageview ios

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

无法将事件从Unity传递回android库jar

我是Unity的新手,我正在尝试为Android库jar创建一个Unity插件,我面临以下问题:

我找不到将后退按钮事件传递给Android库的方法.Unity似乎阻止将此事件传递给库层.我设法做的是通过设置以下行将触摸事件传递到Android端的活动

<meta-data android:name="unityplayer.ForwardNativeEventsToDal vik" android:value="true" />
Run Code Online (Sandbox Code Playgroud)

<activity android:name="com.unity3d.player.UnityPlayerProxyActivity" ... >AndroidManifest中

但是,我不能以我不必更改库中的代码的方式传递后退按钮事件

我现在在剧本中做的是

public void Update() {

if(Input.GetKeyDown(KeyCode.Escape))
Application.Quit();
} 
Run Code Online (Sandbox Code Playgroud)

但是,我需要选项将我捕获的返回事件传递给库,而不是在Unity层处理它.

也许不知何故这样.

myActivity.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK)); 
Run Code Online (Sandbox Code Playgroud)

或这个

myActivity.onBackPressed() 
Run Code Online (Sandbox Code Playgroud)

但是通过C#脚本.我怎样才能在脚本中实现这一目标?

android jar back unity-game-engine

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

在Android Manifest 17以上的SDK中定位SDK时,Proguard混乱Javascript接口功能

我的android项目中有一个自定义Webview,如下所示:

public class MyWebView extends WebView {

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

   public class JsObject {

        @JavascriptInterface
        public void show() {
            //...
        }

        @JavascriptInterface
        public void hide() {
            //....
        }
}
Run Code Online (Sandbox Code Playgroud)

其中包括JavascriptInterface我用来从JavaScript端到Android端的通信.

在AndroidManifest中,我有以下内容

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="16" />
Run Code Online (Sandbox Code Playgroud)

在项目中,我使用了proguard,声明:

-keepattributes JavascriptInterface

-keepclassmembers class * {
    @android.webkit.JavascriptInterface <methods>;
}
Run Code Online (Sandbox Code Playgroud)

一切都很好.

然而,当我将AndroidManifest更改为android:targetSdkVersion=1819测试18及以上的设备时,proguard似乎在某种程度上混淆了无法访问的JavaScript方法.

如果我回到16或少于17的东西一切正常.此外,这只发生在proguard上.如果我不使用proguard,即使使用android:targetSdkVersion=18或19,一切正常.在清单Android> 17中定位时,任何人都可以帮助它吗?

javascript android proguard webview

6
推荐指数
2
解决办法
4627
查看次数

如何在目标c框架函数中将可选依赖项的参数作为参数传递

我正在开发一个目标c框架供其他开发人员使用.

在这个框架中,我想使用其他框架中的可用类(如果它们可用).

例如,目前我正在使用AdSupport.framework(如果可用 - 由应用程序开发人员链接),采用以下方法:

if (NSClassFromString(@"ASIdentifierManager")) {
        NSString adString = [[[NSClassFromString(@"ASIdentifierManager") sharedManager] advertisingIdentifier] UUIDString];
}
Run Code Online (Sandbox Code Playgroud)

但是现在,我希望我的框架的公共函数的参数包含可选依赖项的类,我无法做到这一点.

例如:

我想要一个功能:

+ (void) sendLocation: (CLLocation *) myLoc;
Run Code Online (Sandbox Code Playgroud)

但CoreLocation.framework可以选择性地链接,也许不适用于应用程序.如何使用上述AdSupport.framework的类似方法?

我以为我可以这样做:

+ (void) sendLocation: (NSClassFromString(@"CLLocation") *) myLoc; 
Run Code Online (Sandbox Code Playgroud)

要么

+ (void) sendLocation: (id) myLoc; 
Run Code Online (Sandbox Code Playgroud)

要么

+ (void) sendLocation: (Class) myLoc; 
Run Code Online (Sandbox Code Playgroud)

然后以某种方式提取坐标,但无法实现.最后一个选项(Class)似乎编译但我找不到提取params的方法..

任何人都可以帮忙吗?

objective-c ios

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

以编程方式在framelayout中覆盖imageview上的文本 - Android

我正在尝试在布局的中心和底部的framelayout中的图像上实现textview,如下所示:

http://developer.android.com/resources/articles/layout-tricks-merge.html

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent">

<ImageView  
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 

    android:scaleType="center"
    android:src="@drawable/golden_gate" />

<TextView
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginBottom="20dip"
    android:layout_gravity="center_horizontal|bottom"

    android:padding="12dip"

    android:background="#AA000000"
    android:textColor="#ffffffff"

    android:text="Golden Gate" />

</FrameLayout>
Run Code Online (Sandbox Code Playgroud)

我试图以编程方式实现这一点,但没有运气..我总是在左上角看到textview ..谁能帮忙?这是我的代码:

FrameLayout frameLay = new FrameLayout(MainScreen.this);                            
LayoutParams layoutParamsFrame = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);

frameLay.setLayoutParams(layoutParamsFrame);

LinearLayout.LayoutParams layoutParamsImage= new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);

ImageView imageView= new ImageView(MainScreen.this);
imageView.setImageResource(R.drawable.movie);   
imageView.setLayoutParams(layoutParamsImage);

TextView theText=new TextView(MainScreen.this);
theText.setText("GOLDEN Gate");
theText.setTextColor(Color.WHITE);                           
theText.setTypeface(Typeface.DEFAULT_BOLD); 

LayoutParams layoutParamsText= new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

theText.setLayoutParams(layoutParamsText);

theText.setGravity(Gravity.CENTER_HORIZONTAL|Gravity.BOTTOM);

frameLay.addView(theText);
frameLay.addView(imageView);
Run Code Online (Sandbox Code Playgroud)

android textview imageview android-framelayout

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